neko-ui 2.8.13 → 2.8.14

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 (49) hide show
  1. package/es/code/index.js +2 -2
  2. package/es/code/index.js.map +1 -1
  3. package/es/code/worker.js +2 -2
  4. package/es/code/worker.js.map +1 -1
  5. package/es/md/index.js +1 -1
  6. package/es/md/index.js.map +1 -1
  7. package/es/md/worker.js +1 -1
  8. package/es/md/worker.js.map +1 -1
  9. package/lib/code/index.js +2 -2
  10. package/lib/code/index.js.map +1 -1
  11. package/lib/code/worker.js +2 -2
  12. package/lib/code/worker.js.map +1 -1
  13. package/lib/md/index.js +1 -1
  14. package/lib/md/index.js.map +1 -1
  15. package/lib/md/worker.js +1 -1
  16. package/lib/md/worker.js.map +1 -1
  17. package/package.json +14 -4
  18. package/types/code/index.d.ts +1 -1
  19. package/types/code/worker.d.ts +1 -1
  20. package/umd/index.js +3 -3
  21. package/umd/assets/js/marked.min.js +0 -1
  22. package/umd/assets/js/prism-bash.js +0 -1
  23. package/umd/assets/js/prism-clike.js +0 -1
  24. package/umd/assets/js/prism-css.js +0 -1
  25. package/umd/assets/js/prism-diff-highlight.js +0 -1
  26. package/umd/assets/js/prism-diff.js +0 -1
  27. package/umd/assets/js/prism-docker.js +0 -1
  28. package/umd/assets/js/prism-git.js +0 -1
  29. package/umd/assets/js/prism-highlight-keywords.js +0 -1
  30. package/umd/assets/js/prism-javascript.js +0 -1
  31. package/umd/assets/js/prism-jsx.js +0 -1
  32. package/umd/assets/js/prism-latex.js +0 -1
  33. package/umd/assets/js/prism-less.js +0 -1
  34. package/umd/assets/js/prism-line-numbers.js +0 -1
  35. package/umd/assets/js/prism-markdown.js +0 -1
  36. package/umd/assets/js/prism-markup-templating.js +0 -1
  37. package/umd/assets/js/prism-markup.js +0 -1
  38. package/umd/assets/js/prism-regex.js +0 -1
  39. package/umd/assets/js/prism-rust.js +0 -1
  40. package/umd/assets/js/prism-sql.js +0 -1
  41. package/umd/assets/js/prism-swift.js +0 -1
  42. package/umd/assets/js/prism-toml.js +0 -1
  43. package/umd/assets/js/prism-tsx.js +0 -1
  44. package/umd/assets/js/prism-typescript.js +0 -1
  45. package/umd/assets/js/prism-wasm.js +0 -1
  46. package/umd/assets/js/prism-yaml.js +0 -1
  47. package/umd/assets/js/prism.js +0 -1
  48. package/umd/js/84f4380f043a6fdd.js +0 -1
  49. package/umd/js/c015c3541d0a8866.js +0 -2
package/es/code/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import{use as e}from"solid-js/web";import{template as t}from"solid-js/web";import{setAttribute as o}from"solid-js/web";import{insert as r}from"solid-js/web";import{effect as i}from"solid-js/web";import{delegateEvents as n}from"solid-js/web";import{createComponent as s}from"solid-js/web";import{className as l}from"solid-js/web";import{classList as a}from"solid-js/web";import{addEventListener as d}from"solid-js/web";let m=t('<div class="toolbar"><button class="toolbar-copy" aria-label="copy">'),u=t("<pre><code> "),c=t("<style> "),g=t("<style>"),v=t("<div><textarea>");import{Show as f,createEffect as p,createSignal as b,mergeProps as h,onCleanup as $,onMount as w,untrack as _}from"solid-js";import C from"@moneko/common/lib/isFunction";import k from"@moneko/common/lib/setClipboard";import{css as j,cx as y}from"@moneko/css";import{customElement as L}from"solid-element";import{style as E}from"./style";import x from"../prism";import N from"../prism/css";import W from"../theme";function I(t){let n;let{baseStyle:h}=W,L=/^diff-([\w-]+)/i,[I,R]=b(""),[A,M]=b(20),[O,P]=b(!1);function U(){return new IntersectionObserver(e=>{P(e[0].isIntersecting)})}function B(){return new Worker(new URL("./worker.ts",import.meta.url),{name:"workers/prismjs"})}let F=t.webWorker?void 0:U(),H=t.webWorker?B():void 0;function J(){k(_(I),n)}function S(){return(()=>{let c=u(),g=c.firstChild,v=n,p=g.firstChild;return r(c,s(f,{get when(){return t.toolbar},get children(){let e=m();return d(e.firstChild,"click",J,!0),i(()=>{var r;return o(e,"data-language",null==(r=t.language)?void 0:r.split(" ")[0])}),e}}),g),"function"==typeof v?e(v,g):n=g,i(e=>{let o={[`language-${t.language}`]:!!t.language,"line-numbers":t.lineNumber,"not-toolbar":!t.toolbar,[t.class]:!t.edit},r=`language-${t.language}`,i=I();return e._v$=a(c,o,e._v$),r!==e._v$2&&l(g,e._v$2=r),i!==e._v$3&&(p.data=e._v$3=i),e},{_v$:void 0,_v$2:void 0,_v$3:void 0}),c})()}function T({target:e}){let o=`${e.value}${/\n$/.test(e.value)?"​":""}`;R(o),C(t.onChange)&&t.onChange(o)}function q(e){n.innerHTML=e.data,M(n.getBoundingClientRect().height-(t.toolbar?40:16))}function z(){F&&(F.unobserve(n),F.disconnect())}return p(()=>{if(t.code)try{R(decodeURIComponent(t.code))}catch(e){R(t.code)}else R("")}),p(()=>{t.webWorker?(H||(H=B()),H.addEventListener("message",q)):F||(F=U())}),p(()=>{if(H)H.postMessage(JSON.stringify({language:t.language,code:I()}));else{var e,o;e=t.language||"markup",(o=I())&&O()&&(z(),L.test(e)&&!x.languages[e]&&(x.languages[e]=x.languages.diff),q({data:x.highlight(`${o}
2
- `,x.languages[e]||x.languages.markup,e)}))}}),w(()=>{n&&(null==F||F.observe(n))}),$(()=>{H&&(H.removeEventListener("message",q),H.terminate()),z()}),[(()=>{let e=c(),t=e.firstChild;return i(()=>t.data=h()),e})(),(()=>{let e=c(),t=e.firstChild;return i(()=>t.data=N()),e})(),(()=>{let e=g();return e.textContent=E,e})(),s(f,{get when(){return t.css},get children(){let e=c(),o=e.firstChild;return i(()=>o.data=j(t.css)),e}}),s(f,{get when(){return t.edit},get fallback(){return s(S,{})},get children(){let e=v(),o=e.firstChild;return d(o,"input",T,!0),r(e,s(S,{}),null),i(r=>{let i=y("n-editor",t.class),n=!!t.lineNumber,s=!t.toolbar,a=`${A()}px`;return i!==r._v$4&&l(e,r._v$4=i),n!==r._v$5&&o.classList.toggle("line-numbers",r._v$5=n),s!==r._v$6&&o.classList.toggle("not-toolbar",r._v$6=s),a!==r._v$7&&(null!=(r._v$7=a)?o.style.setProperty("height",a):o.style.removeProperty("height")),r},{_v$4:void 0,_v$5:void 0,_v$6:void 0,_v$7:void 0}),i(()=>o.value=t.code),e}})]}L("n-code",{class:void 0,code:void 0,language:void 0,children:void 0,edit:void 0,toolbar:void 0,css:void 0,lineNumber:void 0,onChange:void 0,webWorker:void 0},(e,t)=>{let o=t.element,r=h({code:o.textContent,css:o.css,onChange(e){o.dispatchEvent(new CustomEvent("change",{detail:e}))}},e);return p(()=>{o.replaceChildren(),o.removeAttribute("css")}),s(I,r)});export default I;n(["click","input"]);
1
+ import{use as e}from"solid-js/web";import{template as t}from"solid-js/web";import{setAttribute as o}from"solid-js/web";import{insert as r}from"solid-js/web";import{effect as n}from"solid-js/web";import{delegateEvents as i}from"solid-js/web";import{createComponent as s}from"solid-js/web";import{className as l}from"solid-js/web";import{classList as a}from"solid-js/web";import{addEventListener as d}from"solid-js/web";let u=t('<div class="toolbar"><button class="toolbar-copy" aria-label="copy">'),m=t("<pre><code> "),c=t("<style> "),g=t("<style>"),v=t("<div><textarea>");import{Show as f,createEffect as p,createSignal as b,mergeProps as h,onCleanup as $,onMount as w,untrack as _}from"solid-js";import C from"@moneko/common/lib/isFunction";import k from"@moneko/common/lib/setClipboard";import{css as j,cx as y}from"@moneko/css";import{customElement as L}from"solid-element";import{style as E}from"./style";import x from"../prism";import N from"../prism/css";import W from"../theme";function I(t){let i;let{baseStyle:h}=W,L=/^diff-([\w-]+)/i,[I,R]=b(""),[A,M]=b(20),[O,P]=b(!1);function U(){return new IntersectionObserver(e=>{P(e[0].isIntersecting)})}function B(){return new Worker(new URL("https://cdn.jsdelivr.net/npm/neko-ui/lib/code/worker.js").href)}let F=t.webWorker?void 0:U(),H=t.webWorker?B():void 0;function J(){k(_(I),i)}function S(){return(()=>{let c=m(),g=c.firstChild,v=i,p=g.firstChild;return r(c,s(f,{get when(){return t.toolbar},get children(){let e=u();return d(e.firstChild,"click",J,!0),n(()=>{var r;return o(e,"data-language",null==(r=t.language)?void 0:r.split(" ")[0])}),e}}),g),"function"==typeof v?e(v,g):i=g,n(e=>{let o={[`language-${t.language}`]:!!t.language,"line-numbers":t.lineNumber,"not-toolbar":!t.toolbar,[t.class]:!t.edit},r=`language-${t.language}`,n=I();return e._v$=a(c,o,e._v$),r!==e._v$2&&l(g,e._v$2=r),n!==e._v$3&&(p.data=e._v$3=n),e},{_v$:void 0,_v$2:void 0,_v$3:void 0}),c})()}function T({target:e}){let o=`${e.value}${/\n$/.test(e.value)?"​":""}`;R(o),C(t.onChange)&&t.onChange(o)}function q(e){i.innerHTML=e.data,M(i.getBoundingClientRect().height-(t.toolbar?40:16))}function z(){F&&(F.unobserve(i),F.disconnect())}return p(()=>{if(t.code)try{R(decodeURIComponent(t.code))}catch(e){R(t.code)}else R("")}),p(()=>{t.webWorker?(H||(H=B()),H.addEventListener("message",q)):F||(F=U())}),p(()=>{if(H)H.postMessage(JSON.stringify({language:t.language,code:I()}));else{var e,o;e=t.language||"markup",(o=I())&&O()&&(z(),L.test(e)&&!x.languages[e]&&(x.languages[e]=x.languages.diff),q({data:x.highlight(`${o}
2
+ `,x.languages[e]||x.languages.markup,e)}))}}),w(()=>{i&&(null==F||F.observe(i))}),$(()=>{H&&(H.removeEventListener("message",q),H.terminate()),z()}),[(()=>{let e=c(),t=e.firstChild;return n(()=>t.data=h()),e})(),(()=>{let e=c(),t=e.firstChild;return n(()=>t.data=N()),e})(),(()=>{let e=g();return e.textContent=E,e})(),s(f,{get when(){return t.css},get children(){let e=c(),o=e.firstChild;return n(()=>o.data=j(t.css)),e}}),s(f,{get when(){return t.edit},get fallback(){return s(S,{})},get children(){let e=v(),o=e.firstChild;return d(o,"input",T,!0),r(e,s(S,{}),null),n(r=>{let n=y("n-editor",t.class),i=!!t.lineNumber,s=!t.toolbar,a=`${A()}px`;return n!==r._v$4&&l(e,r._v$4=n),i!==r._v$5&&o.classList.toggle("line-numbers",r._v$5=i),s!==r._v$6&&o.classList.toggle("not-toolbar",r._v$6=s),a!==r._v$7&&(null!=(r._v$7=a)?o.style.setProperty("height",a):o.style.removeProperty("height")),r},{_v$4:void 0,_v$5:void 0,_v$6:void 0,_v$7:void 0}),n(()=>o.value=t.code),e}})]}L("n-code",{class:void 0,code:void 0,language:void 0,children:void 0,edit:void 0,toolbar:void 0,css:void 0,lineNumber:void 0,onChange:void 0,webWorker:void 0},(e,t)=>{let o=t.element,r=h({code:o.textContent,css:o.css,onChange(e){o.dispatchEvent(new CustomEvent("change",{detail:e}))}},e);return p(()=>{o.replaceChildren(),o.removeAttribute("css")}),s(I,r)});export default I;i(["click","input"]);
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/code/index.tsx"],"sourcesContent":["import {\n Show,\n createEffect,\n createSignal,\n mergeProps,\n onCleanup,\n onMount,\n untrack,\n} from 'solid-js';\nimport { isFunction, setClipboard } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport Prism from '../prism';\nimport prismCss from '../prism/css';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\nexport interface CodeProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 内容 */\n code?: string;\n /** 语言 */\n language?: string;\n /** 显示代码行号 */\n lineNumber?: boolean;\n /** 支持编辑 */\n edit?: boolean;\n /** 开启代码块工具条 */\n toolbar?: boolean;\n /** 编辑修改时的回调 */\n onChange?: (code: string) => void;\n children?: JSX.Element;\n /**\n * 使用 web worker\n * @default true\n */\n webWorker?: boolean;\n}\n\nexport type CodeElement = CustomElement<CodeProps>;\n\nfunction Code(props: CodeProps) {\n const { baseStyle } = theme;\n let codeEl: HTMLPreElement;\n const diffLang = /^diff-([\\w-]+)/i;\n const [code, setCode] = createSignal<string>('');\n const [hei, setHei] = createSignal(20);\n const [isIntersecting, setIsIntersecting] = createSignal(false);\n\n function initObserver() {\n return new IntersectionObserver((entries) => {\n setIsIntersecting(entries[0].isIntersecting);\n });\n }\n function initWorker() {\n return new Worker(new URL('./worker.ts', import.meta.url), {\n name: 'workers/prismjs',\n });\n }\n // eslint-disable-next-line solid/reactivity\n let observer = props.webWorker ? void 0 : initObserver();\n // eslint-disable-next-line solid/reactivity\n let worker: Worker | undefined = props.webWorker ? initWorker() : void 0;\n\n function copy() {\n setClipboard(untrack(code), codeEl);\n }\n function Pre() {\n return (\n <pre\n classList={{\n [`language-${props.language}`]: !!props.language,\n 'line-numbers': props.lineNumber,\n 'not-toolbar': !props.toolbar,\n [props.class as string]: !props.edit,\n }}\n >\n <Show when={props.toolbar}>\n <div class=\"toolbar\" data-language={props.language?.split(' ')[0]}>\n <button class=\"toolbar-copy\" aria-label=\"copy\" onClick={copy} />\n </div>\n </Show>\n <code ref={codeEl} class={`language-${props.language}`} textContent={code()} />\n </pre>\n );\n }\n function change({ target }: { target: HTMLTextAreaElement }) {\n const c = `${target.value}${/\\n$/.test(target.value) ? '\\u200b' : ''}`;\n\n setCode(c);\n if (isFunction(props.onChange)) {\n props.onChange(c);\n }\n }\n function update(e: { data: string }) {\n codeEl.innerHTML = e.data;\n setHei(codeEl.getBoundingClientRect().height - (props.toolbar ? 40 : 16));\n }\n function cleanObserver() {\n if (observer) {\n // 停止观察目标元素\n observer.unobserve(codeEl);\n observer.disconnect();\n }\n }\n function postMessage(language: string, value?: string) {\n if (!value || !isIntersecting()) return;\n cleanObserver();\n if (diffLang.test(language) && !Prism.languages[language]) {\n Prism.languages[language] = Prism.languages.diff;\n }\n update({\n data: Prism.highlight(\n `${value}\\n`,\n Prism.languages[language] || Prism.languages.markup,\n language,\n ),\n });\n }\n createEffect(() => {\n if (props.code) {\n try {\n setCode(decodeURIComponent(props.code));\n } catch (error) {\n setCode(props.code);\n }\n } else {\n setCode('');\n }\n });\n createEffect(() => {\n if (props.webWorker) {\n if (!worker) {\n worker = initWorker();\n }\n worker.addEventListener('message', update);\n } else if (!observer) {\n observer = initObserver();\n }\n });\n\n createEffect(() => {\n if (worker) {\n worker.postMessage(\n JSON.stringify({\n language: props.language,\n code: code(),\n }),\n );\n } else {\n postMessage(props.language || 'markup', code());\n }\n });\n onMount(() => {\n if (codeEl) {\n // 开始观察目标元素\n observer?.observe(codeEl);\n }\n });\n onCleanup(() => {\n if (worker) {\n worker.removeEventListener('message', update);\n worker.terminate();\n }\n cleanObserver();\n });\n\n return (\n <>\n <style textContent={baseStyle()} />\n <style textContent={prismCss()} />\n <style textContent={style} />\n <Show when={props.css}>\n <style textContent={css(props.css)} />\n </Show>\n <Show when={props.edit} fallback={<Pre />}>\n <div class={cx('n-editor', props.class)}>\n <textarea\n value={props.code}\n classList={{\n 'line-numbers': props.lineNumber,\n 'not-toolbar': !props.toolbar,\n }}\n style={{ height: `${hei()}px` }}\n onInput={change}\n />\n <Pre />\n </div>\n </Show>\n </>\n );\n}\n\ncustomElement<CodeProps>(\n 'n-code',\n {\n class: void 0,\n code: void 0,\n language: void 0,\n children: void 0,\n edit: void 0,\n toolbar: void 0,\n css: void 0,\n lineNumber: void 0,\n onChange: void 0,\n webWorker: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n code: el.textContent,\n css: el.css,\n onChange(val: string) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: val,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.replaceChildren();\n el.removeAttribute('css');\n });\n\n return <Code {...props} />;\n },\n);\nexport default Code;\n"],"names":["Show","createEffect","createSignal","mergeProps","onCleanup","onMount","untrack","isFunction","setClipboard","css","cx","customElement","style","Prism","prismCss","theme","Code","props","codeEl","baseStyle","diffLang","code","setCode","hei","setHei","isIntersecting","setIsIntersecting","initObserver","IntersectionObserver","entries","initWorker","Worker","URL","url","name","observer","webWorker","worker","copy","Pre","toolbar","language","split","lineNumber","class","edit","change","target","c","value","test","onChange","update","e","innerHTML","data","getBoundingClientRect","height","cleanObserver","unobserve","disconnect","decodeURIComponent","error","addEventListener","postMessage","JSON","stringify","languages","diff","highlight","markup","observe","removeEventListener","terminate","children","_","opt","el","element","textContent","val","dispatchEvent","CustomEvent","detail","replaceChildren","removeAttribute"],"rangeMappings":";","mappings":"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"}
1
+ {"version":3,"sources":["../../components/code/index.tsx"],"sourcesContent":["import {\n Show,\n createEffect,\n createSignal,\n mergeProps,\n onCleanup,\n onMount,\n untrack,\n} from 'solid-js';\nimport { isFunction, setClipboard } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport Prism from '../prism';\nimport prismCss from '../prism/css';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\nexport interface CodeProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 内容 */\n code?: string;\n /** 语言 */\n language?: string;\n /** 显示代码行号 */\n lineNumber?: boolean;\n /** 支持编辑 */\n edit?: boolean;\n /** 开启代码块工具条 */\n toolbar?: boolean;\n /** 编辑修改时的回调 */\n onChange?: (code: string) => void;\n children?: JSX.Element;\n /**\n * 使用 web worker\n * @default false\n */\n webWorker?: boolean;\n}\n\nexport type CodeElement = CustomElement<CodeProps>;\n\nfunction Code(props: CodeProps) {\n const { baseStyle } = theme;\n let codeEl: HTMLPreElement;\n const diffLang = /^diff-([\\w-]+)/i;\n const [code, setCode] = createSignal<string>('');\n const [hei, setHei] = createSignal(20);\n const [isIntersecting, setIsIntersecting] = createSignal(false);\n\n function initObserver() {\n return new IntersectionObserver((entries) => {\n setIsIntersecting(entries[0].isIntersecting);\n });\n }\n function initWorker() {\n return new Worker(new URL('https://cdn.jsdelivr.net/npm/neko-ui/lib/code/worker.js').href);\n }\n // eslint-disable-next-line solid/reactivity\n let observer = props.webWorker ? void 0 : initObserver();\n // eslint-disable-next-line solid/reactivity\n let worker: Worker | undefined = props.webWorker ? initWorker() : void 0;\n\n function copy() {\n setClipboard(untrack(code), codeEl);\n }\n function Pre() {\n return (\n <pre\n classList={{\n [`language-${props.language}`]: !!props.language,\n 'line-numbers': props.lineNumber,\n 'not-toolbar': !props.toolbar,\n [props.class as string]: !props.edit,\n }}\n >\n <Show when={props.toolbar}>\n <div class=\"toolbar\" data-language={props.language?.split(' ')[0]}>\n <button class=\"toolbar-copy\" aria-label=\"copy\" onClick={copy} />\n </div>\n </Show>\n <code ref={codeEl} class={`language-${props.language}`} textContent={code()} />\n </pre>\n );\n }\n function change({ target }: { target: HTMLTextAreaElement }) {\n const c = `${target.value}${/\\n$/.test(target.value) ? '\\u200b' : ''}`;\n\n setCode(c);\n if (isFunction(props.onChange)) {\n props.onChange(c);\n }\n }\n function update(e: { data: string }) {\n codeEl.innerHTML = e.data;\n setHei(codeEl.getBoundingClientRect().height - (props.toolbar ? 40 : 16));\n }\n function cleanObserver() {\n if (observer) {\n // 停止观察目标元素\n observer.unobserve(codeEl);\n observer.disconnect();\n }\n }\n function postMessage(language: string, value?: string) {\n if (!value || !isIntersecting()) return;\n cleanObserver();\n if (diffLang.test(language) && !Prism.languages[language]) {\n Prism.languages[language] = Prism.languages.diff;\n }\n update({\n data: Prism.highlight(\n `${value}\\n`,\n Prism.languages[language] || Prism.languages.markup,\n language,\n ),\n });\n }\n createEffect(() => {\n if (props.code) {\n try {\n setCode(decodeURIComponent(props.code));\n } catch (error) {\n setCode(props.code);\n }\n } else {\n setCode('');\n }\n });\n createEffect(() => {\n if (props.webWorker) {\n if (!worker) {\n worker = initWorker();\n }\n worker.addEventListener('message', update);\n } else if (!observer) {\n observer = initObserver();\n }\n });\n\n createEffect(() => {\n if (worker) {\n worker.postMessage(\n JSON.stringify({\n language: props.language,\n code: code(),\n }),\n );\n } else {\n postMessage(props.language || 'markup', code());\n }\n });\n onMount(() => {\n if (codeEl) {\n // 开始观察目标元素\n observer?.observe(codeEl);\n }\n });\n onCleanup(() => {\n if (worker) {\n worker.removeEventListener('message', update);\n worker.terminate();\n }\n cleanObserver();\n });\n\n return (\n <>\n <style textContent={baseStyle()} />\n <style textContent={prismCss()} />\n <style textContent={style} />\n <Show when={props.css}>\n <style textContent={css(props.css)} />\n </Show>\n <Show when={props.edit} fallback={<Pre />}>\n <div class={cx('n-editor', props.class)}>\n <textarea\n value={props.code}\n classList={{\n 'line-numbers': props.lineNumber,\n 'not-toolbar': !props.toolbar,\n }}\n style={{ height: `${hei()}px` }}\n onInput={change}\n />\n <Pre />\n </div>\n </Show>\n </>\n );\n}\n\ncustomElement<CodeProps>(\n 'n-code',\n {\n class: void 0,\n code: void 0,\n language: void 0,\n children: void 0,\n edit: void 0,\n toolbar: void 0,\n css: void 0,\n lineNumber: void 0,\n onChange: void 0,\n webWorker: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n code: el.textContent,\n css: el.css,\n onChange(val: string) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: val,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.replaceChildren();\n el.removeAttribute('css');\n });\n\n return <Code {...props} />;\n },\n);\nexport default Code;\n"],"names":["Show","createEffect","createSignal","mergeProps","onCleanup","onMount","untrack","isFunction","setClipboard","css","cx","customElement","style","Prism","prismCss","theme","Code","props","codeEl","baseStyle","diffLang","code","setCode","hei","setHei","isIntersecting","setIsIntersecting","initObserver","IntersectionObserver","entries","initWorker","Worker","URL","href","observer","webWorker","worker","copy","Pre","toolbar","language","split","lineNumber","class","edit","change","target","c","value","test","onChange","update","e","innerHTML","data","getBoundingClientRect","height","cleanObserver","unobserve","disconnect","decodeURIComponent","error","addEventListener","postMessage","JSON","stringify","languages","diff","highlight","markup","observe","removeEventListener","terminate","children","_","opt","el","element","textContent","val","dispatchEvent","CustomEvent","detail","replaceChildren","removeAttribute"],"rangeMappings":";","mappings":"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"}
package/es/code/worker.js CHANGED
@@ -1,3 +1,3 @@
1
- self.importScripts(new URL("prismjs",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-bash.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-clike.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-css.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-diff.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-docker.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-git.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-javascript.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-jsx.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-latex.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-less.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-markdown.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-markup-templating.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-markup.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-regex.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-rust.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-sql.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-swift.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-toml.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-tsx.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-typescript.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-wasm.js",import.meta.url).href),self.importScripts(new URL("prismjs/components/prism-yaml.js",import.meta.url).href),self.importScripts(new URL("prismjs/plugins/diff-highlight/prism-diff-highlight.js",import.meta.url).href),self.importScripts(new URL("prismjs/plugins/highlight-keywords/prism-highlight-keywords.js",import.meta.url).href),self.importScripts(new URL("prismjs/plugins/line-numbers/prism-line-numbers.js",import.meta.url).href);const s=/^diff-([\w-]+)/i;self.addEventListener("message",function(r){let m;try{let{code:i,language:p="markup"}=JSON.parse(r.data);s.test(p)&&!self.Prism.languages[p]&&(self.Prism.languages[p]=self.Prism.languages.diff),m=self.Prism.highlight(`${i}
2
- `,self.Prism.languages[p],p)}catch(s){m=""}self.postMessage(m)},!1);
1
+ self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/prism.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-bash.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-clike.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-css.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-diff.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-docker.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-git.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-javascript.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-jsx.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-latex.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-less.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-markdown.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-markup-templating.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-markup.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-regex.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-rust.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-sql.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-swift.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-toml.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-tsx.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-typescript.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-wasm.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-yaml.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-bash.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/diff-highlight/prism-diff-highlight.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/highlight-keywords/prism-highlight-keywords.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/line-numbers/prism-line-numbers.js"),self.addEventListener("message",function(s){let p;try{let{code:t,language:i="markup"}=JSON.parse(s.data);/^diff-([\w-]+)/i.test(i)&&!self.Prism.languages[i]&&(self.Prism.languages[i]=self.Prism.languages.diff),p=self.Prism.highlight(`${t}
2
+ `,self.Prism.languages[i],i)}catch(s){p=""}self.postMessage(p)},!1);
3
3
  //# sourceMappingURL=worker.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/code/worker.ts"],"sourcesContent":["self.importScripts(new URL('prismjs', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-bash.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-clike.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-css.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-diff.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-docker.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-git.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-javascript.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-jsx.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-latex.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-less.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-markdown.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-markup-templating.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-markup.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-regex.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-rust.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-sql.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-swift.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-toml.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-tsx.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-typescript.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-wasm.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-yaml.js', import.meta.url).href);\n// plugins\nself.importScripts(\n new URL('prismjs/plugins/diff-highlight/prism-diff-highlight.js', import.meta.url).href,\n);\nself.importScripts(\n new URL('prismjs/plugins/highlight-keywords/prism-highlight-keywords.js', import.meta.url).href,\n);\nself.importScripts(\n new URL('prismjs/plugins/line-numbers/prism-line-numbers.js', import.meta.url).href,\n);\nconst diffLang = /^diff-([\\w-]+)/i;\n\nfunction onMessage(e: MessageEvent<string>) {\n let result;\n\n try {\n const { code, language = 'markup' } = JSON.parse(e.data) as {\n code: string;\n language: string;\n };\n\n if (diffLang.test(language) && !self.Prism.languages[language]) {\n self.Prism.languages[language] = self.Prism.languages.diff;\n }\n\n result = self.Prism.highlight(`${code}\\n`, self.Prism.languages[language], language);\n } catch (error) {\n result = '';\n }\n self.postMessage(result); // 向主线程发送消息\n}\n\nself.addEventListener('message', onMessage, false);\n"],"names":["self","importScripts","URL","url","href","diffLang","addEventListener","e","result","code","language","JSON","parse","data","test","Prism","languages","diff","highlight","error","postMessage"],"rangeMappings":";","mappings":"AAAAA,KAAKC,aAAa,CAAC,IAAIC,IAAI,UAAW,YAAYC,GAAG,EAAEC,IAAI,EAC3DJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,mCAAoC,YAAYC,GAAG,EAAEC,IAAI,EACpFJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,oCAAqC,YAAYC,GAAG,EAAEC,IAAI,EACrFJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,kCAAmC,YAAYC,GAAG,EAAEC,IAAI,EACnFJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,mCAAoC,YAAYC,GAAG,EAAEC,IAAI,EACpFJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,qCAAsC,YAAYC,GAAG,EAAEC,IAAI,EACtFJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,kCAAmC,YAAYC,GAAG,EAAEC,IAAI,EACnFJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,yCAA0C,YAAYC,GAAG,EAAEC,IAAI,EAC1FJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,kCAAmC,YAAYC,GAAG,EAAEC,IAAI,EACnFJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,oCAAqC,YAAYC,GAAG,EAAEC,IAAI,EACrFJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,mCAAoC,YAAYC,GAAG,EAAEC,IAAI,EACpFJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,uCAAwC,YAAYC,GAAG,EAAEC,IAAI,EACxFJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,gDAAiD,YAAYC,GAAG,EAAEC,IAAI,EACjGJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,qCAAsC,YAAYC,GAAG,EAAEC,IAAI,EACtFJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,oCAAqC,YAAYC,GAAG,EAAEC,IAAI,EACrFJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,mCAAoC,YAAYC,GAAG,EAAEC,IAAI,EACpFJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,kCAAmC,YAAYC,GAAG,EAAEC,IAAI,EACnFJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,oCAAqC,YAAYC,GAAG,EAAEC,IAAI,EACrFJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,mCAAoC,YAAYC,GAAG,EAAEC,IAAI,EACpFJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,kCAAmC,YAAYC,GAAG,EAAEC,IAAI,EACnFJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,yCAA0C,YAAYC,GAAG,EAAEC,IAAI,EAC1FJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,mCAAoC,YAAYC,GAAG,EAAEC,IAAI,EACpFJ,KAAKC,aAAa,CAAC,IAAIC,IAAI,mCAAoC,YAAYC,GAAG,EAAEC,IAAI,EAEpFJ,KAAKC,aAAa,CAChB,IAAIC,IAAI,yDAA0D,YAAYC,GAAG,EAAEC,IAAI,EAEzFJ,KAAKC,aAAa,CAChB,IAAIC,IAAI,iEAAkE,YAAYC,GAAG,EAAEC,IAAI,EAEjGJ,KAAKC,aAAa,CAChB,IAAIC,IAAI,qDAAsD,YAAYC,GAAG,EAAEC,IAAI,EAErF,MAAMC,EAAW,kBAsBjBL,KAAKM,gBAAgB,CAAC,UApBtB,SAAmBC,CAAuB,EACxC,IAAIC,EAEJ,GAAI,CACF,GAAM,CAAEC,KAAAA,CAAI,CAAEC,SAAAA,EAAW,QAAQ,CAAE,CAAGC,KAAKC,KAAK,CAACL,EAAEM,IAAI,EAKnDR,EAASS,IAAI,CAACJ,IAAa,CAACV,KAAKe,KAAK,CAACC,SAAS,CAACN,EAAS,EAC5DV,CAAAA,KAAKe,KAAK,CAACC,SAAS,CAACN,EAAS,CAAGV,KAAKe,KAAK,CAACC,SAAS,CAACC,IAAI,AAAD,EAG3DT,EAASR,KAAKe,KAAK,CAACG,SAAS,CAAC,CAAC,EAAET,EAAK;AAAE,CAAC,CAAET,KAAKe,KAAK,CAACC,SAAS,CAACN,EAAS,CAAEA,EAC7E,CAAE,MAAOS,EAAO,CACdX,EAAS,EACX,CACAR,KAAKoB,WAAW,CAACZ,EACnB,EAE4C,CAAA"}
1
+ {"version":3,"sources":["../../components/code/worker.ts"],"sourcesContent":["self.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/prism.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-bash.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-clike.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-css.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-diff.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-docker.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-git.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-javascript.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-jsx.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-latex.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-less.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-markdown.js');\nself.importScripts(\n 'https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-markup-templating.js',\n);\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-markup.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-regex.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-rust.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-sql.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-swift.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-toml.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-tsx.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-typescript.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-wasm.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-yaml.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-bash.js');\n// plugins\nself.importScripts(\n 'https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/diff-highlight/prism-diff-highlight.js',\n);\nself.importScripts(\n 'https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/highlight-keywords/prism-highlight-keywords.js',\n);\nself.importScripts(\n 'https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/line-numbers/prism-line-numbers.js',\n);\n\nfunction onMessage(e: MessageEvent<string>) {\n let result;\n\n try {\n const { code, language = 'markup' } = JSON.parse(e.data) as {\n code: string;\n language: string;\n };\n\n if (/^diff-([\\w-]+)/i.test(language) && !self.Prism.languages[language]) {\n self.Prism.languages[language] = self.Prism.languages.diff;\n }\n\n result = self.Prism.highlight(`${code}\\n`, self.Prism.languages[language], language);\n } catch (error) {\n result = '';\n }\n self.postMessage(result); // 向主线程发送消息\n}\n\nself.addEventListener('message', onMessage, false);\n"],"names":["self","importScripts","addEventListener","e","result","code","language","JSON","parse","data","test","Prism","languages","diff","highlight","error","postMessage"],"rangeMappings":";","mappings":"AAAAA,KAAKC,aAAa,CAAC,wDACnBD,KAAKC,aAAa,CAAC,wEACnBD,KAAKC,aAAa,CAAC,yEACnBD,KAAKC,aAAa,CAAC,uEACnBD,KAAKC,aAAa,CAAC,wEACnBD,KAAKC,aAAa,CAAC,0EACnBD,KAAKC,aAAa,CAAC,uEACnBD,KAAKC,aAAa,CAAC,8EACnBD,KAAKC,aAAa,CAAC,uEACnBD,KAAKC,aAAa,CAAC,yEACnBD,KAAKC,aAAa,CAAC,wEACnBD,KAAKC,aAAa,CAAC,4EACnBD,KAAKC,aAAa,CAChB,qFAEFD,KAAKC,aAAa,CAAC,0EACnBD,KAAKC,aAAa,CAAC,yEACnBD,KAAKC,aAAa,CAAC,wEACnBD,KAAKC,aAAa,CAAC,uEACnBD,KAAKC,aAAa,CAAC,yEACnBD,KAAKC,aAAa,CAAC,wEACnBD,KAAKC,aAAa,CAAC,uEACnBD,KAAKC,aAAa,CAAC,8EACnBD,KAAKC,aAAa,CAAC,wEACnBD,KAAKC,aAAa,CAAC,wEACnBD,KAAKC,aAAa,CAAC,wEAEnBD,KAAKC,aAAa,CAChB,8FAEFD,KAAKC,aAAa,CAChB,sGAEFD,KAAKC,aAAa,CAChB,0FAuBFD,KAAKE,gBAAgB,CAAC,UApBtB,SAAmBC,CAAuB,EACxC,IAAIC,EAEJ,GAAI,CACF,GAAM,CAAEC,KAAAA,CAAI,CAAEC,SAAAA,EAAW,QAAQ,CAAE,CAAGC,KAAKC,KAAK,CAACL,EAAEM,IAAI,EAKnD,kBAAkBC,IAAI,CAACJ,IAAa,CAACN,KAAKW,KAAK,CAACC,SAAS,CAACN,EAAS,EACrEN,CAAAA,KAAKW,KAAK,CAACC,SAAS,CAACN,EAAS,CAAGN,KAAKW,KAAK,CAACC,SAAS,CAACC,IAAI,AAAD,EAG3DT,EAASJ,KAAKW,KAAK,CAACG,SAAS,CAAC,CAAC,EAAET,EAAK;AAAE,CAAC,CAAEL,KAAKW,KAAK,CAACC,SAAS,CAACN,EAAS,CAAEA,EAC7E,CAAE,MAAOS,EAAO,CACdX,EAAS,EACX,CACAJ,KAAKgB,WAAW,CAACZ,EACnB,EAE4C,CAAA"}
package/es/md/index.js CHANGED
@@ -1,2 +1,2 @@
1
- function e(e,t,r,o,n,i,l){try{var a=e[i](l),s=a.value}catch(e){r(e);return}a.done?t(s):Promise.resolve(s).then(o,n)}function t(){return(t=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e}).apply(this,arguments)}import{use as r}from"solid-js/web";import{template as o}from"solid-js/web";import{insert as n}from"solid-js/web";import{effect as i}from"solid-js/web";import{createComponent as l}from"solid-js/web";import{className as a}from"solid-js/web";let s=o("<style> "),c=o("<style>"),d=o('<article class="n-md-box" part="box"><div class="n-md-body" part="body">'),u=o('<article part="box">');import{For as m,Match as f,Show as h,Switch as p,createEffect as v,mergeProps as b,onCleanup as g}from"solid-js";import w from"@moneko/common/lib/frameCallback";import{css as x,cx as y}from"@moneko/css";import{customElement as k}from"solid-element";import"../code";import"../img";import C from"../md-style";import L from"../theme";function $(o){let k,$;let{baseStyle:E}=L,P=b({webWorker:!1,pictureViewer:!0,lazyPicture:!0,text:"",tools:["copy"],getAnchorContainer:()=>window},o);function j(){return new Worker(new URL("./worker.ts",import.meta.url),{name:"workers/marked-completed"})}let A=P.webWorker?j():void 0;function O(e){$&&($.innerHTML=e.data)}function z(){var r;return r=function*(e){let{text:r,pictureViewer:o,lazyPicture:n,langToolbar:i}=e,l=function(e,t){if(null==e)return{};var r,o,n={},i=Object.keys(e);for(o=0;o<i.length;o++)t.indexOf(r=i[o])>=0||(n[r]=e[r]);return n}(e,["text","pictureViewer","lazyPicture","langToolbar"]),a=(yield import("marked-completed")).default;k||((k=new a.Renderer).katexBlock=e=>`<n-katex display-mode="true">${e}</n-katex>`,k.katexInline=e=>`<n-katex>${e}</n-katex>`),k.image=(e,t,r)=>`<n-img lazy="${n}" disabled="${!o}" role="img" src="${e}" alt="${r}" ${t?`title="${t}"`:""}></n-img>`;let s=!!(null==i?void 0:i.length);k.code=function(e,t){return"treeview"===t?`<n-tree data="${e}" />`:`<n-code class="n-code" toolbar="${s}" language="${t}" ${l.langLineNumber?'line-number="true"':""}>${encodeURIComponent(e)}</n-code>`},O({data:a(r,t({renderer:k,langToolbar:i,headerPrefix:"# ",breaks:!0,pedantic:!1,smartLists:!0,smartypants:!0,xhtml:!0},l))})},(z=function(){var t=this,o=arguments;return new Promise(function(n,i){var l=r.apply(t,o);function a(t){e(l,n,i,a,s,"next",t)}function s(t){e(l,n,i,a,s,"throw",t)}a(void 0)})}).apply(this,arguments)}v(()=>{P.webWorker&&(A||(A=j()),A.addEventListener("message",O))}),v(()=>{A?A.postMessage(JSON.stringify({text:P.text,langLineNumber:P.lineNumber,langToolbar:P.tools,pictureViewer:P.pictureViewer,lazyPicture:P.lazyPicture})):w(()=>(function(e){return z.apply(this,arguments)})({text:P.text,langLineNumber:P.lineNumber,langToolbar:P.tools,pictureViewer:P.pictureViewer,lazyPicture:P.lazyPicture}))}),g(()=>{A&&(A.removeEventListener("message",O),A.terminate())});let N=[],T=[],V=[];function I(e){e.preventDefault(),e.stopPropagation();let t=e.target;if(t.hash){var r;null==$||null==(r=$.querySelector(decodeURIComponent(t.hash)))||r.scrollIntoView({behavior:"smooth",block:"nearest"}),N.forEach(e=>e.classList.remove("active")),t.classList.add("active")}else window.open(t.href)}function R(e){e.forEach(e=>{let t;let r=e.target.getAttribute("id"),o=e.target.querySelectorAll("a");if(N.forEach(e=>{e.hash===`#${r}`?t=e:e.hash||o.forEach(r=>{r.href===e.href&&(t=e)})}),t){let r=V.indexOf(t);if(V.forEach(e=>{e.classList.remove("active")}),e.isIntersecting?V.push(t):-1!==r&&V.splice(r,1),V[0]){var n;V[0].classList.add("active"),null==(n=V[0].offsetParent)||n.scrollTo({top:V[0].offsetTop})}}})}return v(()=>{var e;let t;$&&(null==(e=P.text)?void 0:e.startsWith("[TOC]"))&&(N=[...$.querySelectorAll(".n-md-toc a[href]")],T=[...$.querySelectorAll("h1, h2, h3, h4, h5, h6")],t=new IntersectionObserver(R,{rootMargin:"-50px 0px",threshold:.5}),T.forEach(e=>t.observe(e)),N.forEach(e=>{e.addEventListener("click",I)})),g(()=>{t&&(T.forEach(e=>t.unobserve(e)),t.disconnect()),N.forEach(e=>{e.removeEventListener("click",I)})})}),[(()=>{let e=s(),t=e.firstChild;return i(()=>t.data=E()),e})(),(()=>{let e=c();return e.textContent=C,e})(),l(h,{get when(){return P.css},get children(){let e=s(),t=e.firstChild;return i(()=>t.data=x(P.css)),e}}),l(p,{get children(){return[l(f,{get when(){var W;return null==(W=P.children)?void 0:W.length},get children(){let e=d();return n(e.firstChild,l(m,{get each(){return P.children},children:e=>e})),e}}),l(f,{get when(){return P.text},get children(){let e=u(),t=$;return"function"==typeof t?r(t,e):$=e,i(()=>a(e,y("n-md-box",P.class))),e}})]}})]}k("n-md",{class:void 0,pictureViewer:void 0,lazyPicture:void 0,lineNumber:!0,text:void 0,tools:void 0,getAnchorContainer:void 0,css:void 0,children:void 0,notRender:void 0,webWorker:void 0},(e,t)=>{let r=t.element,o=b({text:!e.notRender&&r.textContent||r.text,css:r.css,tools:r.tools,getAnchorContainer:r.getAnchorContainer},e);return v(()=>{r.removeAttribute("css"),r.replaceChildren()}),l($,o)});export default $;
1
+ function e(e,t,r,o,n,i,l){try{var a=e[i](l),s=a.value}catch(e){r(e);return}a.done?t(s):Promise.resolve(s).then(o,n)}function t(){return(t=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e}).apply(this,arguments)}import{use as r}from"solid-js/web";import{template as o}from"solid-js/web";import{insert as n}from"solid-js/web";import{effect as i}from"solid-js/web";import{createComponent as l}from"solid-js/web";import{className as a}from"solid-js/web";let s=o("<style> "),c=o("<style>"),d=o('<article class="n-md-box" part="box"><div class="n-md-body" part="body">'),u=o('<article part="box">');import{For as m,Match as h,Show as f,Switch as p,createEffect as v,mergeProps as b,onCleanup as g}from"solid-js";import w from"@moneko/common/lib/frameCallback";import{css as x,cx as y}from"@moneko/css";import{customElement as k}from"solid-element";import"../code";import"../img";import C from"../md-style";import $ from"../theme";function E(o){let k,E;let{baseStyle:L}=$,P=b({webWorker:!1,pictureViewer:!0,lazyPicture:!0,text:"",tools:["copy"],getAnchorContainer:()=>window},o);function j(){return new Worker("https://cdn.jsdelivr.net/npm/neko-ui/lib/md/worker.js")}let A=P.webWorker?j():void 0;function O(e){E&&(E.innerHTML=e.data)}function z(){var r;return r=function*(e){let{text:r,pictureViewer:o,lazyPicture:n,langToolbar:i}=e,l=function(e,t){if(null==e)return{};var r,o,n={},i=Object.keys(e);for(o=0;o<i.length;o++)t.indexOf(r=i[o])>=0||(n[r]=e[r]);return n}(e,["text","pictureViewer","lazyPicture","langToolbar"]),a=(yield import("marked-completed")).default;k||((k=new a.Renderer).katexBlock=e=>`<n-katex display-mode="true">${e}</n-katex>`,k.katexInline=e=>`<n-katex>${e}</n-katex>`),k.image=(e,t,r)=>`<n-img lazy="${n}" disabled="${!o}" role="img" src="${e}" alt="${r}" ${t?`title="${t}"`:""}></n-img>`;let s=!!(null==i?void 0:i.length);k.code=function(e,t){return"treeview"===t?`<n-tree data="${e}" />`:`<n-code class="n-code" toolbar="${s}" language="${t}" ${l.langLineNumber?'line-number="true"':""}>${encodeURIComponent(e)}</n-code>`},O({data:a(r,t({renderer:k,langToolbar:i,headerPrefix:"# ",breaks:!0,pedantic:!1,smartLists:!0,smartypants:!0,xhtml:!0},l))})},(z=function(){var t=this,o=arguments;return new Promise(function(n,i){var l=r.apply(t,o);function a(t){e(l,n,i,a,s,"next",t)}function s(t){e(l,n,i,a,s,"throw",t)}a(void 0)})}).apply(this,arguments)}v(()=>{P.webWorker&&(A||(A=j()),A.addEventListener("message",O))}),v(()=>{A?A.postMessage(JSON.stringify({text:P.text,langLineNumber:P.lineNumber,langToolbar:P.tools,pictureViewer:P.pictureViewer,lazyPicture:P.lazyPicture})):w(()=>(function(e){return z.apply(this,arguments)})({text:P.text,langLineNumber:P.lineNumber,langToolbar:P.tools,pictureViewer:P.pictureViewer,lazyPicture:P.lazyPicture}))}),g(()=>{A&&(A.removeEventListener("message",O),A.terminate())});let N=[],T=[],V=[];function I(e){e.preventDefault(),e.stopPropagation();let t=e.target;if(t.hash){var r;null==E||null==(r=E.querySelector(decodeURIComponent(t.hash)))||r.scrollIntoView({behavior:"smooth",block:"nearest"}),N.forEach(e=>e.classList.remove("active")),t.classList.add("active")}else window.open(t.href)}function W(e){e.forEach(e=>{let t;let r=e.target.getAttribute("id"),o=e.target.querySelectorAll("a");if(N.forEach(e=>{e.hash===`#${r}`?t=e:e.hash||o.forEach(r=>{r.href===e.href&&(t=e)})}),t){let r=V.indexOf(t);if(V.forEach(e=>{e.classList.remove("active")}),e.isIntersecting?V.push(t):-1!==r&&V.splice(r,1),V[0]){var n;V[0].classList.add("active"),null==(n=V[0].offsetParent)||n.scrollTo({top:V[0].offsetTop})}}})}return v(()=>{var e;let t;E&&(null==(e=P.text)?void 0:e.startsWith("[TOC]"))&&(N=[...E.querySelectorAll(".n-md-toc a[href]")],T=[...E.querySelectorAll("h1, h2, h3, h4, h5, h6")],t=new IntersectionObserver(W,{rootMargin:"-50px 0px",threshold:.5}),T.forEach(e=>t.observe(e)),N.forEach(e=>{e.addEventListener("click",I)})),g(()=>{t&&(T.forEach(e=>t.unobserve(e)),t.disconnect()),N.forEach(e=>{e.removeEventListener("click",I)})})}),[(()=>{let e=s(),t=e.firstChild;return i(()=>t.data=L()),e})(),(()=>{let e=c();return e.textContent=C,e})(),l(f,{get when(){return P.css},get children(){let e=s(),t=e.firstChild;return i(()=>t.data=x(P.css)),e}}),l(p,{get children(){return[l(h,{get when(){var R;return null==(R=P.children)?void 0:R.length},get children(){let e=d();return n(e.firstChild,l(m,{get each(){return P.children},children:e=>e})),e}}),l(h,{get when(){return P.text},get children(){let e=u(),t=E;return"function"==typeof t?r(t,e):E=e,i(()=>a(e,y("n-md-box",P.class))),e}})]}})]}k("n-md",{class:void 0,pictureViewer:void 0,lazyPicture:void 0,lineNumber:!0,text:void 0,tools:void 0,getAnchorContainer:void 0,css:void 0,children:void 0,notRender:void 0,webWorker:void 0},(e,t)=>{let r=t.element,o=b({text:!e.notRender&&r.textContent||r.text,css:r.css,tools:r.tools,getAnchorContainer:r.getAnchorContainer},e);return v(()=>{r.removeAttribute("css"),r.replaceChildren()}),l(E,o)});export default E;
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/md/index.tsx"],"sourcesContent":["import { For, Match, Show, Switch, createEffect, mergeProps, onCleanup } from 'solid-js';\nimport { frameCallback } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport '../code';\nimport '../img';\nimport mdStyle from '../md-style';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\nfunction MD(_props: MdProps) {\n let renderer: marked.Renderer | undefined;\n let ref: HTMLDivElement | undefined;\n const { baseStyle } = theme;\n const props = mergeProps(\n {\n webWorker: false,\n pictureViewer: true,\n lazyPicture: true,\n text: '',\n tools: ['copy'],\n getAnchorContainer: () => window as unknown as HTMLElement,\n },\n _props,\n );\n\n function initWorker() {\n return new Worker(new URL('./worker.ts', import.meta.url), {\n name: 'workers/marked-completed',\n });\n }\n // eslint-disable-next-line solid/reactivity\n let worker: Worker | undefined = props.webWorker ? initWorker() : void 0;\n\n function update(e: { data: string }) {\n if (ref) {\n ref.innerHTML = e.data;\n }\n }\n async function postMessage(opt: {\n text: string;\n pictureViewer?: boolean;\n lazyPicture?: boolean;\n langToolbar?: string[];\n langLineNumber?: boolean;\n }) {\n const { text, pictureViewer, lazyPicture, langToolbar, ...options } = opt;\n const marked = (await import('marked-completed')).default;\n\n if (!renderer) {\n renderer = new marked.Renderer();\n\n renderer.katexBlock = (code: string) => {\n return `<n-katex display-mode=\"true\">${code}</n-katex>`;\n };\n renderer.katexInline = (code: string) => {\n return `<n-katex>${code}</n-katex>`;\n };\n }\n\n renderer.image = (src: string, title: string, alt: string) => {\n return `<n-img lazy=\"${lazyPicture}\" disabled=\"${!pictureViewer}\" role=\"img\" src=\"${src}\" alt=\"${alt}\" ${title ? `title=\"${title}\"` : ''}></n-img>`;\n };\n const toolbar = !!langToolbar?.length;\n\n renderer.code = function (code: string, lang: string) {\n if (lang === 'treeview') {\n return `<n-tree data=\"${code}\" />`;\n }\n\n return `<n-code class=\"n-code\" toolbar=\"${toolbar}\" language=\"${lang}\" ${\n options.langLineNumber ? 'line-number=\"true\"' : ''\n }>${encodeURIComponent(code)}</n-code>`;\n };\n\n update({\n data: marked(text, {\n renderer: renderer,\n langToolbar: langToolbar,\n headerPrefix: '# ',\n breaks: true,\n pedantic: false,\n smartLists: true,\n smartypants: true,\n xhtml: true,\n ...options,\n }),\n });\n }\n createEffect(() => {\n if (props.webWorker) {\n if (!worker) {\n worker = initWorker();\n }\n worker.addEventListener('message', update);\n }\n });\n\n createEffect(() => {\n if (worker) {\n worker.postMessage(\n JSON.stringify({\n text: props.text,\n langLineNumber: props.lineNumber,\n langToolbar: props.tools,\n pictureViewer: props.pictureViewer,\n lazyPicture: props.lazyPicture,\n }),\n );\n } else {\n const call = () =>\n postMessage({\n text: props.text,\n langLineNumber: props.lineNumber,\n langToolbar: props.tools,\n pictureViewer: props.pictureViewer,\n lazyPicture: props.lazyPicture,\n });\n\n frameCallback(call);\n }\n });\n onCleanup(() => {\n if (worker) {\n worker.removeEventListener('message', update);\n worker.terminate();\n }\n });\n let list: HTMLAnchorElement[] = [];\n let heading: HTMLHeadingElement[] = [];\n const active: HTMLAnchorElement[] = [];\n\n function handleAnchor(e: Event) {\n e.preventDefault();\n e.stopPropagation();\n const a = e.target as HTMLAnchorElement;\n\n if (a.hash) {\n ref?.querySelector(decodeURIComponent(a.hash))?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n });\n list.forEach((item) => item.classList.remove('active'));\n a.classList.add('active');\n } else {\n window.open(a.href);\n }\n }\n function observerEntry(entries: IntersectionObserverEntry[]) {\n entries.forEach((entry) => {\n const id = entry.target.getAttribute('id');\n const all = entry.target.querySelectorAll('a');\n let a: HTMLAnchorElement | undefined;\n\n list.forEach((l) => {\n if (l.hash === `#${id}`) {\n a = l;\n } else if (!l.hash) {\n all.forEach((e) => {\n if (e.href === l.href) {\n a = l;\n }\n });\n }\n });\n if (a) {\n const idx = active.indexOf(a);\n\n active.forEach((e) => {\n e.classList.remove('active');\n });\n if (entry.isIntersecting) {\n active.push(a);\n } else if (idx !== -1) {\n active.splice(idx, 1);\n }\n if (active[0]) {\n active[0].classList.add('active');\n active[0].offsetParent?.scrollTo({\n top: active[0].offsetTop,\n });\n }\n }\n });\n }\n createEffect(() => {\n let observer: IntersectionObserver;\n\n if (ref && props.text?.startsWith('[TOC]')) {\n list = [...ref.querySelectorAll<HTMLAnchorElement>('.n-md-toc a[href]')];\n heading = [...ref.querySelectorAll<HTMLHeadingElement>('h1, h2, h3, h4, h5, h6')];\n observer = new IntersectionObserver(observerEntry, {\n rootMargin: '-50px 0px',\n threshold: 0.5,\n });\n heading.forEach((e) => observer.observe(e));\n list.forEach((e) => {\n e.addEventListener('click', handleAnchor);\n });\n }\n onCleanup(() => {\n if (observer) {\n heading.forEach((e) => observer.unobserve(e));\n observer.disconnect();\n }\n list.forEach((e) => {\n e.removeEventListener('click', handleAnchor);\n });\n });\n });\n\n return (\n <>\n <style textContent={baseStyle()} />\n <style textContent={mdStyle} />\n <Show when={props.css}>\n <style textContent={css(props.css)} />\n </Show>\n <Switch>\n <Match when={(props.children as [])?.length}>\n <article class=\"n-md-box\" part=\"box\">\n <div class=\"n-md-body\" part=\"body\">\n <For each={props.children as []}>{(e) => e}</For>\n </div>\n </article>\n </Match>\n <Match when={props.text}>\n <article ref={ref} class={cx('n-md-box', props.class)} part=\"box\" />\n </Match>\n </Switch>\n </>\n );\n}\n\nexport interface MdProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** md内容 */\n text?: string;\n /** 开启图片查看器\n * @since 2.0.8\n * @default true\n */\n pictureViewer?: boolean;\n /** 开启图片懒加载\n * @since 2.8.3\n * @default true\n */\n lazyPicture?: boolean;\n /** 显示代码块行号\n * @default true\n */\n lineNumber?: boolean;\n /** 开启代码块工具条\n * @default ['copy']\n */\n tools?: 'copy'[];\n /** 指定滚动的容器\n * @default () => window\n */\n getAnchorContainer?: () => HTMLElement;\n /** 不进行解析\n * @default false\n */\n notRender?: boolean;\n children?: JSX.Element;\n /**\n * 使用 web worker\n */\n webWorker?: boolean;\n}\n\nexport type MdElement = CustomElement<MdProps>;\n\ncustomElement<MdProps>(\n 'n-md',\n {\n class: void 0,\n pictureViewer: void 0,\n lazyPicture: void 0,\n lineNumber: true,\n text: void 0,\n tools: void 0,\n getAnchorContainer: void 0,\n css: void 0,\n children: void 0,\n notRender: void 0,\n webWorker: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n text: (!_.notRender && el.textContent) || el.text,\n css: el.css,\n tools: el.tools,\n getAnchorContainer: el.getAnchorContainer,\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n el.replaceChildren();\n });\n return <MD {...props} />;\n },\n);\nexport default MD;\n"],"names":["For","Match","Show","Switch","createEffect","mergeProps","onCleanup","frameCallback","css","cx","customElement","mdStyle","theme","MD","_props","renderer","ref","baseStyle","props","webWorker","pictureViewer","lazyPicture","text","tools","getAnchorContainer","window","initWorker","Worker","URL","url","name","worker","update","e","innerHTML","data","postMessage","opt","langToolbar","options","marked","default","Renderer","katexBlock","code","katexInline","image","src","title","alt","toolbar","length","lang","langLineNumber","encodeURIComponent","headerPrefix","breaks","pedantic","smartLists","smartypants","xhtml","addEventListener","JSON","stringify","lineNumber","removeEventListener","terminate","list","heading","active","handleAnchor","preventDefault","stopPropagation","a","target","hash","querySelector","decodeURIComponent","scrollIntoView","behavior","block","forEach","item","classList","remove","add","open","href","observerEntry","entries","entry","id","getAttribute","all","querySelectorAll","l","idx","indexOf","isIntersecting","push","splice","offsetParent","scrollTo","top","offsetTop","observer","startsWith","IntersectionObserver","rootMargin","threshold","observe","unobserve","disconnect","children","class","notRender","_","el","element","textContent","removeAttribute","replaceChildren"],"rangeMappings":"","mappings":"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"}
1
+ {"version":3,"sources":["../../components/md/index.tsx"],"sourcesContent":["import { For, Match, Show, Switch, createEffect, mergeProps, onCleanup } from 'solid-js';\nimport { frameCallback } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport '../code';\nimport '../img';\nimport mdStyle from '../md-style';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\nfunction MD(_props: MdProps) {\n let renderer: marked.Renderer | undefined;\n let ref: HTMLDivElement | undefined;\n const { baseStyle } = theme;\n const props = mergeProps(\n {\n webWorker: false,\n pictureViewer: true,\n lazyPicture: true,\n text: '',\n tools: ['copy'],\n getAnchorContainer: () => window as unknown as HTMLElement,\n },\n _props,\n );\n\n function initWorker() {\n return new Worker('https://cdn.jsdelivr.net/npm/neko-ui/lib/md/worker.js');\n }\n // eslint-disable-next-line solid/reactivity\n let worker: Worker | undefined = props.webWorker ? initWorker() : void 0;\n\n function update(e: { data: string }) {\n if (ref) {\n ref.innerHTML = e.data;\n }\n }\n async function postMessage(opt: {\n text: string;\n pictureViewer?: boolean;\n lazyPicture?: boolean;\n langToolbar?: string[];\n langLineNumber?: boolean;\n }) {\n const { text, pictureViewer, lazyPicture, langToolbar, ...options } = opt;\n const marked = (await import('marked-completed')).default;\n\n if (!renderer) {\n renderer = new marked.Renderer();\n\n renderer.katexBlock = (code: string) => {\n return `<n-katex display-mode=\"true\">${code}</n-katex>`;\n };\n renderer.katexInline = (code: string) => {\n return `<n-katex>${code}</n-katex>`;\n };\n }\n\n renderer.image = (src: string, title: string, alt: string) => {\n return `<n-img lazy=\"${lazyPicture}\" disabled=\"${!pictureViewer}\" role=\"img\" src=\"${src}\" alt=\"${alt}\" ${title ? `title=\"${title}\"` : ''}></n-img>`;\n };\n const toolbar = !!langToolbar?.length;\n\n renderer.code = function (code: string, lang: string) {\n if (lang === 'treeview') {\n return `<n-tree data=\"${code}\" />`;\n }\n\n return `<n-code class=\"n-code\" toolbar=\"${toolbar}\" language=\"${lang}\" ${\n options.langLineNumber ? 'line-number=\"true\"' : ''\n }>${encodeURIComponent(code)}</n-code>`;\n };\n\n update({\n data: marked(text, {\n renderer: renderer,\n langToolbar: langToolbar,\n headerPrefix: '# ',\n breaks: true,\n pedantic: false,\n smartLists: true,\n smartypants: true,\n xhtml: true,\n ...options,\n }),\n });\n }\n createEffect(() => {\n if (props.webWorker) {\n if (!worker) {\n worker = initWorker();\n }\n worker.addEventListener('message', update);\n }\n });\n\n createEffect(() => {\n if (worker) {\n worker.postMessage(\n JSON.stringify({\n text: props.text,\n langLineNumber: props.lineNumber,\n langToolbar: props.tools,\n pictureViewer: props.pictureViewer,\n lazyPicture: props.lazyPicture,\n }),\n );\n } else {\n const call = () =>\n postMessage({\n text: props.text,\n langLineNumber: props.lineNumber,\n langToolbar: props.tools,\n pictureViewer: props.pictureViewer,\n lazyPicture: props.lazyPicture,\n });\n\n frameCallback(call);\n }\n });\n onCleanup(() => {\n if (worker) {\n worker.removeEventListener('message', update);\n worker.terminate();\n }\n });\n let list: HTMLAnchorElement[] = [];\n let heading: HTMLHeadingElement[] = [];\n const active: HTMLAnchorElement[] = [];\n\n function handleAnchor(e: Event) {\n e.preventDefault();\n e.stopPropagation();\n const a = e.target as HTMLAnchorElement;\n\n if (a.hash) {\n ref?.querySelector(decodeURIComponent(a.hash))?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n });\n list.forEach((item) => item.classList.remove('active'));\n a.classList.add('active');\n } else {\n window.open(a.href);\n }\n }\n function observerEntry(entries: IntersectionObserverEntry[]) {\n entries.forEach((entry) => {\n const id = entry.target.getAttribute('id');\n const all = entry.target.querySelectorAll('a');\n let a: HTMLAnchorElement | undefined;\n\n list.forEach((l) => {\n if (l.hash === `#${id}`) {\n a = l;\n } else if (!l.hash) {\n all.forEach((e) => {\n if (e.href === l.href) {\n a = l;\n }\n });\n }\n });\n if (a) {\n const idx = active.indexOf(a);\n\n active.forEach((e) => {\n e.classList.remove('active');\n });\n if (entry.isIntersecting) {\n active.push(a);\n } else if (idx !== -1) {\n active.splice(idx, 1);\n }\n if (active[0]) {\n active[0].classList.add('active');\n active[0].offsetParent?.scrollTo({\n top: active[0].offsetTop,\n });\n }\n }\n });\n }\n createEffect(() => {\n let observer: IntersectionObserver;\n\n if (ref && props.text?.startsWith('[TOC]')) {\n list = [...ref.querySelectorAll<HTMLAnchorElement>('.n-md-toc a[href]')];\n heading = [...ref.querySelectorAll<HTMLHeadingElement>('h1, h2, h3, h4, h5, h6')];\n observer = new IntersectionObserver(observerEntry, {\n rootMargin: '-50px 0px',\n threshold: 0.5,\n });\n heading.forEach((e) => observer.observe(e));\n list.forEach((e) => {\n e.addEventListener('click', handleAnchor);\n });\n }\n onCleanup(() => {\n if (observer) {\n heading.forEach((e) => observer.unobserve(e));\n observer.disconnect();\n }\n list.forEach((e) => {\n e.removeEventListener('click', handleAnchor);\n });\n });\n });\n\n return (\n <>\n <style textContent={baseStyle()} />\n <style textContent={mdStyle} />\n <Show when={props.css}>\n <style textContent={css(props.css)} />\n </Show>\n <Switch>\n <Match when={(props.children as [])?.length}>\n <article class=\"n-md-box\" part=\"box\">\n <div class=\"n-md-body\" part=\"body\">\n <For each={props.children as []}>{(e) => e}</For>\n </div>\n </article>\n </Match>\n <Match when={props.text}>\n <article ref={ref} class={cx('n-md-box', props.class)} part=\"box\" />\n </Match>\n </Switch>\n </>\n );\n}\n\nexport interface MdProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** md内容 */\n text?: string;\n /** 开启图片查看器\n * @since 2.0.8\n * @default true\n */\n pictureViewer?: boolean;\n /** 开启图片懒加载\n * @since 2.8.3\n * @default true\n */\n lazyPicture?: boolean;\n /** 显示代码块行号\n * @default true\n */\n lineNumber?: boolean;\n /** 开启代码块工具条\n * @default ['copy']\n */\n tools?: 'copy'[];\n /** 指定滚动的容器\n * @default () => window\n */\n getAnchorContainer?: () => HTMLElement;\n /** 不进行解析\n * @default false\n */\n notRender?: boolean;\n children?: JSX.Element;\n /**\n * 使用 web worker\n */\n webWorker?: boolean;\n}\n\nexport type MdElement = CustomElement<MdProps>;\n\ncustomElement<MdProps>(\n 'n-md',\n {\n class: void 0,\n pictureViewer: void 0,\n lazyPicture: void 0,\n lineNumber: true,\n text: void 0,\n tools: void 0,\n getAnchorContainer: void 0,\n css: void 0,\n children: void 0,\n notRender: void 0,\n webWorker: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n text: (!_.notRender && el.textContent) || el.text,\n css: el.css,\n tools: el.tools,\n getAnchorContainer: el.getAnchorContainer,\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n el.replaceChildren();\n });\n return <MD {...props} />;\n },\n);\nexport default MD;\n"],"names":["For","Match","Show","Switch","createEffect","mergeProps","onCleanup","frameCallback","css","cx","customElement","mdStyle","theme","MD","_props","renderer","ref","baseStyle","props","webWorker","pictureViewer","lazyPicture","text","tools","getAnchorContainer","window","initWorker","Worker","worker","update","e","innerHTML","data","postMessage","opt","langToolbar","options","marked","default","Renderer","katexBlock","code","katexInline","image","src","title","alt","toolbar","length","lang","langLineNumber","encodeURIComponent","headerPrefix","breaks","pedantic","smartLists","smartypants","xhtml","addEventListener","JSON","stringify","lineNumber","removeEventListener","terminate","list","heading","active","handleAnchor","preventDefault","stopPropagation","a","target","hash","querySelector","decodeURIComponent","scrollIntoView","behavior","block","forEach","item","classList","remove","add","open","href","observerEntry","entries","entry","id","getAttribute","all","querySelectorAll","l","idx","indexOf","isIntersecting","push","splice","offsetParent","scrollTo","top","offsetTop","observer","startsWith","IntersectionObserver","rootMargin","threshold","observe","unobserve","disconnect","children","class","notRender","_","el","element","textContent","removeAttribute","replaceChildren"],"rangeMappings":"","mappings":"gsBAAA,QAASA,OAAAA,CAAG,CAAEC,SAAAA,CAAK,CAAEC,QAAAA,CAAI,CAAEC,UAAAA,CAAM,CAAEC,gBAAAA,CAAY,CAAEC,cAAAA,CAAU,CAAEC,aAAAA,CAAS,KAAQ,UAAW,AACzF,QAASC,MAAqB,kCAAiB,AAC/C,QAASC,OAAAA,CAAG,CAAEC,MAAAA,CAAE,KAAQ,aAAc,AACtC,QAASC,iBAAAA,CAAa,KAAQ,eAAgB,AAC9C,OAAO,SAAU,AACjB,OAAO,QAAS,AAChB,QAAOC,MAAa,aAAc,AAClC,QAAOC,MAAW,UAAW,CAG7B,SAASC,EAAGC,CAAe,MACrBC,EACAC,EACJ,GAAM,CAAEC,UAAAA,CAAS,CAAE,CAAGL,EAChBM,EAAQb,EACZ,CACEc,UAAW,CAAA,EACXC,cAAe,CAAA,EACfC,YAAa,CAAA,EACbC,KAAM,GACNC,MAAO,CAAC,OAAO,CACfC,mBAAoB,IAAMC,MAC5B,EACAX,GAGF,SAASY,IACP,OAAO,IAAIC,OAAO,wDACpB,CAEA,IAAIC,EAA6BV,EAAMC,SAAS,CAAGO,IAAe,KAAK,EAEvE,SAASG,EAAOC,CAAmB,EAC7Bd,GACFA,CAAAA,EAAIe,SAAS,CAAGD,EAAEE,IAAI,AAAD,CAEzB,UACeC,mBAAf,UAA2BC,CAM1B,EACC,GAAM,CAAEZ,KAAAA,CAAI,CAAEF,cAAAA,CAAa,CAAEC,YAAAA,CAAW,CAAEc,YAAAA,CAAW,CAAc,CAAGD,EAAZE,qIAAYF,GAA9DZ,OAAMF,gBAAeC,cAAac,gBACpCE,EAAS,AAAC,CAAA,MAAM,MAAM,CAAC,mBAAkB,EAAGC,OAAO,CAEpDvB,IAGHA,AAFAA,CAAAA,EAAW,IAAIsB,EAAOE,QAAQ,AAAC,EAEtBC,UAAU,CAAG,AAACC,GACd,CAAC,6BAA6B,EAAEA,EAAK,UAAU,CAAC,CAEzD1B,EAAS2B,WAAW,CAAG,AAACD,GACf,CAAC,SAAS,EAAEA,EAAK,UAAU,CAAC,EAIvC1B,EAAS4B,KAAK,CAAG,CAACC,EAAaC,EAAeC,IACrC,CAAC,aAAa,EAAEzB,EAAY,YAAY,EAAE,CAACD,EAAc,kBAAkB,EAAEwB,EAAI,OAAO,EAAEE,EAAI,EAAE,EAAED,EAAQ,CAAC,OAAO,EAAEA,EAAM,CAAC,CAAC,CAAG,GAAG,SAAS,CAAC,CAErJ,IAAME,EAAU,CAAC,QAACZ,SAAAA,EAAaa,MAAM,CAErCjC,CAAAA,EAAS0B,IAAI,CAAG,SAAUA,CAAY,CAAEQ,CAAY,QAClD,AAAIA,AAAS,aAATA,EACK,CAAC,cAAc,EAAER,EAAK,IAAI,CAAC,CAG7B,CAAC,gCAAgC,EAAEM,EAAQ,YAAY,EAAEE,EAAK,EAAE,EACrEb,EAAQc,cAAc,CAAG,qBAAuB,GACjD,CAAC,EAAEC,mBAAmBV,GAAM,SAAS,CAAC,AACzC,EAEAZ,EAAO,CACLG,KAAMK,EAAOf,EAAM,GACjBP,SAAUA,EACVoB,YAAaA,EACbiB,aAAc,KACdC,OAAQ,CAAA,EACRC,SAAU,CAAA,EACVC,WAAY,CAAA,EACZC,YAAa,CAAA,EACbC,MAAO,CAAA,GACJrB,GAEP,EACF,GAjDeH,qMAkDf7B,EAAa,KACPc,EAAMC,SAAS,GACZS,GACHA,CAAAA,EAASF,GAAW,EAEtBE,EAAO8B,gBAAgB,CAAC,UAAW7B,GAEvC,GAEAzB,EAAa,KACPwB,EACFA,EAAOK,WAAW,CAChB0B,KAAKC,SAAS,CAAC,CACbtC,KAAMJ,EAAMI,IAAI,CAChB4B,eAAgBhC,EAAM2C,UAAU,CAChC1B,YAAajB,EAAMK,KAAK,CACxBH,cAAeF,EAAME,aAAa,CAClCC,YAAaH,EAAMG,WAAW,AAChC,IAYFd,EATa,IACX0B,UAxEqBC,CAM1B,SANcD,0BAwEG,CACVX,KAAMJ,EAAMI,IAAI,CAChB4B,eAAgBhC,EAAM2C,UAAU,CAChC1B,YAAajB,EAAMK,KAAK,CACxBH,cAAeF,EAAME,aAAa,CAClCC,YAAaH,EAAMG,WAAW,AAChC,GAIN,GACAf,EAAU,KACJsB,IACFA,EAAOkC,mBAAmB,CAAC,UAAWjC,GACtCD,EAAOmC,SAAS,GAEpB,GACA,IAAIC,EAA4B,EAAE,CAC9BC,EAAgC,EAAE,CAChCC,EAA8B,EAAE,CAEtC,SAASC,EAAarC,CAAQ,EAC5BA,EAAEsC,cAAc,GAChBtC,EAAEuC,eAAe,GACjB,IAAMC,EAAIxC,EAAEyC,MAAM,CAElB,GAAID,EAAEE,IAAI,CAAE,KACVxD,QAAAA,UAAAA,EAAAA,EAAKyD,aAAa,CAACC,mBAAmBJ,EAAEE,IAAI,KAA5CxD,EAAgD2D,cAAc,CAAC,CAC7DC,SAAU,SACVC,MAAO,SACT,GACAb,EAAKc,OAAO,CAAC,AAACC,GAASA,EAAKC,SAAS,CAACC,MAAM,CAAC,WAC7CX,EAAEU,SAAS,CAACE,GAAG,CAAC,SAClB,MACEzD,OAAO0D,IAAI,CAACb,EAAEc,IAAI,CAEtB,CACA,SAASC,EAAcC,CAAoC,EACzDA,EAAQR,OAAO,CAAC,AAACS,QAGXjB,EAFJ,IAAMkB,EAAKD,EAAMhB,MAAM,CAACkB,YAAY,CAAC,MAC/BC,EAAMH,EAAMhB,MAAM,CAACoB,gBAAgB,CAAC,KAc1C,GAXA3B,EAAKc,OAAO,CAAC,AAACc,IACRA,EAAEpB,IAAI,GAAK,CAAC,CAAC,EAAEgB,EAAG,CAAC,CACrBlB,EAAIsB,EACMA,EAAEpB,IAAI,EAChBkB,EAAIZ,OAAO,CAAC,AAAChD,IACPA,EAAEsD,IAAI,GAAKQ,EAAER,IAAI,EACnBd,CAAAA,EAAIsB,CAAAA,CAER,EAEJ,GACItB,EAAG,CACL,IAAMuB,EAAM3B,EAAO4B,OAAO,CAACxB,GAU3B,GARAJ,EAAOY,OAAO,CAAC,AAAChD,IACdA,EAAEkD,SAAS,CAACC,MAAM,CAAC,SACrB,GACIM,EAAMQ,cAAc,CACtB7B,EAAO8B,IAAI,CAAC1B,GACK,KAARuB,GACT3B,EAAO+B,MAAM,CAACJ,EAAK,GAEjB3B,CAAM,CAAC,EAAE,CAAE,KAEbA,EADAA,CAAM,CAAC,EAAE,CAACc,SAAS,CAACE,GAAG,CAAC,iBACxBhB,EAAAA,CAAM,CAAC,EAAE,CAACgC,YAAY,GAAtBhC,EAAwBiC,QAAQ,CAAC,CAC/BC,IAAKlC,CAAM,CAAC,EAAE,CAACmC,SAAS,AAC1B,EACF,CACF,CACF,EACF,CA2BA,OA1BAjG,EAAa,SAGAc,MAFPoF,EAEAtF,WAAOE,EAAAA,EAAMI,IAAI,SAAVJ,EAAYqF,UAAU,CAAC,YAChCvC,EAAO,IAAIhD,EAAI2E,gBAAgB,CAAoB,qBAAqB,CACxE1B,EAAU,IAAIjD,EAAI2E,gBAAgB,CAAqB,0BAA0B,CACjFW,EAAW,IAAIE,qBAAqBnB,EAAe,CACjDoB,WAAY,YACZC,UAAW,EACb,GACAzC,EAAQa,OAAO,CAAC,AAAChD,GAAMwE,EAASK,OAAO,CAAC7E,IACxCkC,EAAKc,OAAO,CAAC,AAAChD,IACZA,EAAE4B,gBAAgB,CAAC,QAASS,EAC9B,IAEF7D,EAAU,KACJgG,IACFrC,EAAQa,OAAO,CAAC,AAAChD,GAAMwE,EAASM,SAAS,CAAC9E,IAC1CwE,EAASO,UAAU,IAErB7C,EAAKc,OAAO,CAAC,AAAChD,IACZA,EAAEgC,mBAAmB,CAAC,QAASK,EACjC,EACF,EACF,uDAIwBlD,gDACAN,UACnBT,qBAAWgB,EAAMV,GAAG,8DACCA,EAAIU,EAAMV,GAAG,UAElCL,2BACEF,kBAAaiB,gBAAAA,EAAAA,EAAM4F,QAAQ,SAAf,AAAC5F,EAAuB8B,MAAM,mDAGpChD,qBAAUkB,EAAM4F,QAAQ,WAAS,AAAChF,GAAMA,YAI9C7B,qBAAYiB,EAAMI,IAAI,6BACPN,oCAAAA,cAAYP,EAAG,WAAYS,EAAM6F,KAAK,aAK9D,CA4CArG,EACE,OACA,CACEqG,MAAO,KAAK,EACZ3F,cAAe,KAAK,EACpBC,YAAa,KAAK,EAClBwC,WAAY,CAAA,EACZvC,KAAM,KAAK,EACXC,MAAO,KAAK,EACZC,mBAAoB,KAAK,EACzBhB,IAAK,KAAK,EACVsG,SAAU,KAAK,EACfE,UAAW,KAAK,EAChB7F,UAAW,KAAK,CAClB,EACA,CAAC8F,EAAG/E,KACF,IAAMgF,EAAKhF,EAAIiF,OAAO,CAChBjG,EAAQb,EACZ,CACEiB,KAAM,AAAC,CAAC2F,EAAED,SAAS,EAAIE,EAAGE,WAAW,EAAKF,EAAG5F,IAAI,CACjDd,IAAK0G,EAAG1G,GAAG,CACXe,MAAO2F,EAAG3F,KAAK,CACfC,mBAAoB0F,EAAG1F,kBAAkB,AAC3C,EACAyF,GAOF,OAJA7G,EAAa,KACX8G,EAAGG,eAAe,CAAC,OACnBH,EAAGI,eAAe,EACpB,KACQzG,EAAOK,EACjB,EAEF,gBAAeL,CAAG"}
package/es/md/worker.js CHANGED
@@ -1,2 +1,2 @@
1
- function e(){return(e=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}self.importScripts(new URL("marked-completed",import.meta.url).href),self.addEventListener("message",function(t){let n;try{let r=JSON.parse(t.data),{text:a,pictureViewer:l,lazyPicture:o,langToolbar:i}=r,s=function(e,t){if(null==e)return{};var n,r,a={},l=Object.keys(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(r,["text","pictureViewer","lazyPicture","langToolbar"]),c=new self.marked.Renderer;c.katexBlock=function(e){return`<n-katex display-mode="true">${e}</n-katex>`},c.katexInline=function(e){return`<n-katex>${e}</n-katex>`},c.image=(e,t,n)=>`<n-img lazy="${o}" disabled="${!l}" role="img" src="${e}" alt="${n}" ${t?`title="${t}"`:""}></n-img>`;let u=!!(null==i?void 0:i.length);c.code=function(e,t){return"treeview"===t?`<n-tree data="${e}" />`:`<n-code class="n-code" toolbar="${u}" language="${t}" ${s.langLineNumber?'line-number="true"':""}>${encodeURIComponent(e)}</n-code>`},n=self.marked(a,e({renderer:c,langToolbar:i,headerPrefix:"# ",breaks:!0,pedantic:!1,smartLists:!0,smartypants:!0,xhtml:!0},s))}catch(e){n=e}self.postMessage(n)},!1);export{};
1
+ function e(){return(e=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}self.importScripts("https://cdn.jsdelivr.net/npm/marked-completed/marked.min.js"),self.addEventListener("message",function(t){let n;try{let r=JSON.parse(t.data),{text:a,pictureViewer:l,lazyPicture:i,langToolbar:o}=r,s=function(e,t){if(null==e)return{};var n,r,a={},l=Object.keys(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(r,["text","pictureViewer","lazyPicture","langToolbar"]),c=new self.marked.Renderer;c.katexBlock=function(e){return`<n-katex display-mode="true">${e}</n-katex>`},c.katexInline=function(e){return`<n-katex>${e}</n-katex>`},c.image=(e,t,n)=>`<n-img lazy="${i}" disabled="${!l}" role="img" src="${e}" alt="${n}" ${t?`title="${t}"`:""}></n-img>`;let d=!!(null==o?void 0:o.length);c.code=function(e,t){return"treeview"===t?`<n-tree data="${e}" />`:`<n-code class="n-code" toolbar="${d}" language="${t}" ${s.langLineNumber?'line-number="true"':""}>${encodeURIComponent(e)}</n-code>`},n=self.marked(a,e({renderer:c,langToolbar:o,headerPrefix:"# ",breaks:!0,pedantic:!1,smartLists:!0,smartypants:!0,xhtml:!0},s))}catch(e){n=e}self.postMessage(n)},!1);export{};
2
2
  //# sourceMappingURL=worker.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/md/worker.ts"],"sourcesContent":["import type { MarkedOptions } from 'marked-completed';\n\nself.importScripts(new URL('marked-completed', import.meta.url).href);\n\nfunction onMessage(e: MessageEvent<string>) {\n let result;\n\n try {\n const { text, pictureViewer, lazyPicture, langToolbar, ...options } = JSON.parse(e.data) as {\n text: string;\n pictureViewer?: boolean;\n lazyPicture?: boolean;\n langToolbar?: string[];\n langLineNumber?: boolean;\n } & MarkedOptions;\n const renderer = new self.marked.Renderer();\n\n renderer.katexBlock = function (code: string) {\n return `<n-katex display-mode=\"true\">${code}</n-katex>`;\n };\n renderer.katexInline = function (code: string) {\n return `<n-katex>${code}</n-katex>`;\n };\n renderer.image = (src: string, title: string, alt: string) => {\n return `<n-img lazy=\"${lazyPicture}\" disabled=\"${!pictureViewer}\" role=\"img\" src=\"${src}\" alt=\"${alt}\" ${title ? `title=\"${title}\"` : ''}></n-img>`;\n };\n const toolbar = !!langToolbar?.length;\n\n renderer.code = function (code: string, lang: string) {\n if (lang === 'treeview') {\n return `<n-tree data=\"${code}\" />`;\n }\n\n return `<n-code class=\"n-code\" toolbar=\"${toolbar}\" language=\"${lang}\" ${\n options.langLineNumber ? 'line-number=\"true\"' : ''\n }>${encodeURIComponent(code)}</n-code>`;\n };\n\n result = self.marked(text, {\n renderer: renderer,\n langToolbar: langToolbar,\n headerPrefix: '# ',\n breaks: true,\n pedantic: false,\n smartLists: true,\n smartypants: true,\n xhtml: true,\n ...options,\n });\n } catch (error) {\n result = error;\n }\n self.postMessage(result);\n}\n\nself.addEventListener('message', onMessage, false);\n"],"names":["self","importScripts","URL","url","href","addEventListener","e","result","JSON","parse","data","text","pictureViewer","lazyPicture","langToolbar","options","renderer","marked","Renderer","katexBlock","code","katexInline","image","src","title","alt","toolbar","length","lang","langLineNumber","encodeURIComponent","headerPrefix","breaks","pedantic","smartLists","smartypants","xhtml","error","postMessage"],"rangeMappings":"","mappings":"+MAEAA,KAAKC,aAAa,CAAC,IAAIC,IAAI,mBAAoB,YAAYC,GAAG,EAAEC,IAAI,EAqDpEJ,KAAKK,gBAAgB,CAAC,UAnDtB,SAAmBC,CAAuB,EACxC,IAAIC,EAEJ,GAAI,CACF,IAAsEC,EAAAA,KAAKC,KAAK,CAACH,EAAEI,IAAI,EAAjF,CAAEC,KAAAA,CAAI,CAAEC,cAAAA,CAAa,CAAEC,YAAAA,CAAW,CAAEC,YAAAA,CAAW,CAAc,CAAGN,EAAZO,uIAAYP,GAA9DG,OAAMC,gBAAeC,cAAaC,gBAOpCE,EAAW,IAAIhB,KAAKiB,MAAM,CAACC,QAAQ,AAEzCF,CAAAA,EAASG,UAAU,CAAG,SAAUC,CAAY,EAC1C,MAAO,CAAC,6BAA6B,EAAEA,EAAK,UAAU,CAAC,AACzD,EACAJ,EAASK,WAAW,CAAG,SAAUD,CAAY,EAC3C,MAAO,CAAC,SAAS,EAAEA,EAAK,UAAU,CAAC,AACrC,EACAJ,EAASM,KAAK,CAAG,CAACC,EAAaC,EAAeC,IACrC,CAAC,aAAa,EAAEZ,EAAY,YAAY,EAAE,CAACD,EAAc,kBAAkB,EAAEW,EAAI,OAAO,EAAEE,EAAI,EAAE,EAAED,EAAQ,CAAC,OAAO,EAAEA,EAAM,CAAC,CAAC,CAAG,GAAG,SAAS,CAAC,CAErJ,IAAME,EAAU,CAAC,QAACZ,SAAAA,EAAaa,MAAM,CAErCX,CAAAA,EAASI,IAAI,CAAG,SAAUA,CAAY,CAAEQ,CAAY,QAClD,AAAIA,AAAS,aAATA,EACK,CAAC,cAAc,EAAER,EAAK,IAAI,CAAC,CAG7B,CAAC,gCAAgC,EAAEM,EAAQ,YAAY,EAAEE,EAAK,EAAE,EACrEb,EAAQc,cAAc,CAAG,qBAAuB,GACjD,CAAC,EAAEC,mBAAmBV,GAAM,SAAS,CAAC,AACzC,EAEAb,EAASP,KAAKiB,MAAM,CAACN,EAAM,GACzBK,SAAUA,EACVF,YAAaA,EACbiB,aAAc,KACdC,OAAQ,CAAA,EACRC,SAAU,CAAA,EACVC,WAAY,CAAA,EACZC,YAAa,CAAA,EACbC,MAAO,CAAA,GACJrB,GAEP,CAAE,MAAOsB,EAAO,CACd9B,EAAS8B,CACX,CACArC,KAAKsC,WAAW,CAAC/B,EACnB,EAE4C,CAAA"}
1
+ {"version":3,"sources":["../../components/md/worker.ts"],"sourcesContent":["import type { MarkedOptions } from 'marked-completed';\n\nself.importScripts('https://cdn.jsdelivr.net/npm/marked-completed/marked.min.js');\n\nfunction onMessage(e: MessageEvent<string>) {\n let result;\n\n try {\n const { text, pictureViewer, lazyPicture, langToolbar, ...options } = JSON.parse(e.data) as {\n text: string;\n pictureViewer?: boolean;\n lazyPicture?: boolean;\n langToolbar?: string[];\n langLineNumber?: boolean;\n } & MarkedOptions;\n const renderer = new self.marked.Renderer();\n\n renderer.katexBlock = function (code: string) {\n return `<n-katex display-mode=\"true\">${code}</n-katex>`;\n };\n renderer.katexInline = function (code: string) {\n return `<n-katex>${code}</n-katex>`;\n };\n renderer.image = (src: string, title: string, alt: string) => {\n return `<n-img lazy=\"${lazyPicture}\" disabled=\"${!pictureViewer}\" role=\"img\" src=\"${src}\" alt=\"${alt}\" ${title ? `title=\"${title}\"` : ''}></n-img>`;\n };\n const toolbar = !!langToolbar?.length;\n\n renderer.code = function (code: string, lang: string) {\n if (lang === 'treeview') {\n return `<n-tree data=\"${code}\" />`;\n }\n\n return `<n-code class=\"n-code\" toolbar=\"${toolbar}\" language=\"${lang}\" ${\n options.langLineNumber ? 'line-number=\"true\"' : ''\n }>${encodeURIComponent(code)}</n-code>`;\n };\n\n result = self.marked(text, {\n renderer: renderer,\n langToolbar: langToolbar,\n headerPrefix: '# ',\n breaks: true,\n pedantic: false,\n smartLists: true,\n smartypants: true,\n xhtml: true,\n ...options,\n });\n } catch (error) {\n result = error;\n }\n self.postMessage(result);\n}\n\nself.addEventListener('message', onMessage, false);\n"],"names":["self","importScripts","addEventListener","e","result","JSON","parse","data","text","pictureViewer","lazyPicture","langToolbar","options","renderer","marked","Renderer","katexBlock","code","katexInline","image","src","title","alt","toolbar","length","lang","langLineNumber","encodeURIComponent","headerPrefix","breaks","pedantic","smartLists","smartypants","xhtml","error","postMessage"],"rangeMappings":"","mappings":"+MAEAA,KAAKC,aAAa,CAAC,+DAqDnBD,KAAKE,gBAAgB,CAAC,UAnDtB,SAAmBC,CAAuB,EACxC,IAAIC,EAEJ,GAAI,CACF,IAAsEC,EAAAA,KAAKC,KAAK,CAACH,EAAEI,IAAI,EAAjF,CAAEC,KAAAA,CAAI,CAAEC,cAAAA,CAAa,CAAEC,YAAAA,CAAW,CAAEC,YAAAA,CAAW,CAAc,CAAGN,EAAZO,uIAAYP,GAA9DG,OAAMC,gBAAeC,cAAaC,gBAOpCE,EAAW,IAAIb,KAAKc,MAAM,CAACC,QAAQ,AAEzCF,CAAAA,EAASG,UAAU,CAAG,SAAUC,CAAY,EAC1C,MAAO,CAAC,6BAA6B,EAAEA,EAAK,UAAU,CAAC,AACzD,EACAJ,EAASK,WAAW,CAAG,SAAUD,CAAY,EAC3C,MAAO,CAAC,SAAS,EAAEA,EAAK,UAAU,CAAC,AACrC,EACAJ,EAASM,KAAK,CAAG,CAACC,EAAaC,EAAeC,IACrC,CAAC,aAAa,EAAEZ,EAAY,YAAY,EAAE,CAACD,EAAc,kBAAkB,EAAEW,EAAI,OAAO,EAAEE,EAAI,EAAE,EAAED,EAAQ,CAAC,OAAO,EAAEA,EAAM,CAAC,CAAC,CAAG,GAAG,SAAS,CAAC,CAErJ,IAAME,EAAU,CAAC,QAACZ,SAAAA,EAAaa,MAAM,CAErCX,CAAAA,EAASI,IAAI,CAAG,SAAUA,CAAY,CAAEQ,CAAY,QAClD,AAAIA,AAAS,aAATA,EACK,CAAC,cAAc,EAAER,EAAK,IAAI,CAAC,CAG7B,CAAC,gCAAgC,EAAEM,EAAQ,YAAY,EAAEE,EAAK,EAAE,EACrEb,EAAQc,cAAc,CAAG,qBAAuB,GACjD,CAAC,EAAEC,mBAAmBV,GAAM,SAAS,CAAC,AACzC,EAEAb,EAASJ,KAAKc,MAAM,CAACN,EAAM,GACzBK,SAAUA,EACVF,YAAaA,EACbiB,aAAc,KACdC,OAAQ,CAAA,EACRC,SAAU,CAAA,EACVC,WAAY,CAAA,EACZC,YAAa,CAAA,EACbC,MAAO,CAAA,GACJrB,GAEP,CAAE,MAAOsB,EAAO,CACd9B,EAAS8B,CACX,CACAlC,KAAKmC,WAAW,CAAC/B,EACnB,EAE4C,CAAA"}
package/lib/code/index.js CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return h}});const e=require("solid-js/web"),t=require("solid-js"),n=c(require("@moneko/common/lib/isFunction")),r=c(require("@moneko/common/lib/setClipboard")),o=require("@moneko/css"),a=require("solid-element"),l=require("./style"),i=c(require("../prism")),s=c(require("../prism/css")),u=c(require("../theme"));function c(e){return e&&e.__esModule?e:{default:e}}const d=(0,e.template)('<div class="toolbar"><button class="toolbar-copy" aria-label="copy">'),g=(0,e.template)("<pre><code> "),f=(0,e.template)("<style> "),v=(0,e.template)("<style>"),m=(0,e.template)("<div><textarea>");function p(a){let c;let{baseStyle:p}=u.default,h=/^diff-([\w-]+)/i,[b,$]=(0,t.createSignal)(""),[_,C]=(0,t.createSignal)(20),[w,k]=(0,t.createSignal)(!1);function y(){return new IntersectionObserver(e=>{k(e[0].isIntersecting)})}function E(){return new Worker(new URL("./worker.ts",require("url").pathToFileURL(__filename).toString()),{name:"workers/prismjs"})}let q=a.webWorker?void 0:y(),L=a.webWorker?E():void 0;function S(){(0,r.default)((0,t.untrack)(b),c)}function x(){return(()=>{let n=g(),r=n.firstChild,o=c,l=r.firstChild;return(0,e.insert)(n,(0,e.createComponent)(t.Show,{get when(){return a.toolbar},get children(){let t=d(),n=t.firstChild;return(0,e.addEventListener)(n,"click",S,!0),(0,e.effect)(()=>(0,e.setAttribute)(t,"data-language",a.language?.split(" ")[0])),t}}),r),"function"==typeof o?(0,e.use)(o,r):c=r,(0,e.effect)(t=>{let o={[`language-${a.language}`]:!!a.language,"line-numbers":a.lineNumber,"not-toolbar":!a.toolbar,[a.class]:!a.edit},i=`language-${a.language}`,s=b();return t._v$=(0,e.classList)(n,o,t._v$),i!==t._v$2&&(0,e.className)(r,t._v$2=i),s!==t._v$3&&(l.data=t._v$3=s),t},{_v$:void 0,_v$2:void 0,_v$3:void 0}),n})()}function N({target:e}){let t=`${e.value}${/\n$/.test(e.value)?"​":""}`;$(t),(0,n.default)(a.onChange)&&a.onChange(t)}function j(e){c.innerHTML=e.data,C(c.getBoundingClientRect().height-(a.toolbar?40:16))}function M(){q&&(q.unobserve(c),q.disconnect())}return(0,t.createEffect)(()=>{if(a.code)try{$(decodeURIComponent(a.code))}catch(e){$(a.code)}else $("")}),(0,t.createEffect)(()=>{a.webWorker?(L||(L=E()),L.addEventListener("message",j)):q||(q=y())}),(0,t.createEffect)(()=>{if(L)L.postMessage(JSON.stringify({language:a.language,code:b()}));else{var e,t;e=a.language||"markup",(t=b())&&w()&&(M(),h.test(e)&&!i.default.languages[e]&&(i.default.languages[e]=i.default.languages.diff),j({data:i.default.highlight(`${t}
2
- `,i.default.languages[e]||i.default.languages.markup,e)}))}}),(0,t.onMount)(()=>{c&&q?.observe(c)}),(0,t.onCleanup)(()=>{L&&(L.removeEventListener("message",j),L.terminate()),M()}),[(()=>{let t=f(),n=t.firstChild;return(0,e.effect)(()=>n.data=p()),t})(),(()=>{let t=f(),n=t.firstChild;return(0,e.effect)(()=>n.data=(0,s.default)()),t})(),(()=>{let e=v();return e.textContent=l.style,e})(),(0,e.createComponent)(t.Show,{get when(){return a.css},get children(){let t=f(),n=t.firstChild;return(0,e.effect)(()=>n.data=(0,o.css)(a.css)),t}}),(0,e.createComponent)(t.Show,{get when(){return a.edit},get fallback(){return(0,e.createComponent)(x,{})},get children(){let t=m(),n=t.firstChild;return(0,e.addEventListener)(n,"input",N,!0),(0,e.insert)(t,(0,e.createComponent)(x,{}),null),(0,e.effect)(r=>{let l=(0,o.cx)("n-editor",a.class),i=!!a.lineNumber,s=!a.toolbar,u=`${_()}px`;return l!==r._v$4&&(0,e.className)(t,r._v$4=l),i!==r._v$5&&n.classList.toggle("line-numbers",r._v$5=i),s!==r._v$6&&n.classList.toggle("not-toolbar",r._v$6=s),u!==r._v$7&&(null!=(r._v$7=u)?n.style.setProperty("height",u):n.style.removeProperty("height")),r},{_v$4:void 0,_v$5:void 0,_v$6:void 0,_v$7:void 0}),(0,e.effect)(()=>n.value=a.code),t}})]}(0,a.customElement)("n-code",{class:void 0,code:void 0,language:void 0,children:void 0,edit:void 0,toolbar:void 0,css:void 0,lineNumber:void 0,onChange:void 0,webWorker:void 0},(n,r)=>{let o=r.element,a=(0,t.mergeProps)({code:o.textContent,css:o.css,onChange(e){o.dispatchEvent(new CustomEvent("change",{detail:e}))}},n);return(0,t.createEffect)(()=>{o.replaceChildren(),o.removeAttribute("css")}),(0,e.createComponent)(p,a)});const h=p;(0,e.delegateEvents)(["click","input"]);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return h}});const e=require("solid-js/web"),t=require("solid-js"),n=c(require("@moneko/common/lib/isFunction")),r=c(require("@moneko/common/lib/setClipboard")),o=require("@moneko/css"),a=require("solid-element"),l=require("./style"),i=c(require("../prism")),s=c(require("../prism/css")),u=c(require("../theme"));function c(e){return e&&e.__esModule?e:{default:e}}const d=(0,e.template)('<div class="toolbar"><button class="toolbar-copy" aria-label="copy">'),g=(0,e.template)("<pre><code> "),f=(0,e.template)("<style> "),v=(0,e.template)("<style>"),m=(0,e.template)("<div><textarea>");function p(a){let c;let{baseStyle:p}=u.default,h=/^diff-([\w-]+)/i,[b,$]=(0,t.createSignal)(""),[C,_]=(0,t.createSignal)(20),[w,k]=(0,t.createSignal)(!1);function y(){return new IntersectionObserver(e=>{k(e[0].isIntersecting)})}function E(){return new Worker(new URL("https://cdn.jsdelivr.net/npm/neko-ui/lib/code/worker.js").href)}let q=a.webWorker?void 0:y(),L=a.webWorker?E():void 0;function x(){(0,r.default)((0,t.untrack)(b),c)}function S(){return(()=>{let n=g(),r=n.firstChild,o=c,l=r.firstChild;return(0,e.insert)(n,(0,e.createComponent)(t.Show,{get when(){return a.toolbar},get children(){let t=d(),n=t.firstChild;return(0,e.addEventListener)(n,"click",x,!0),(0,e.effect)(()=>(0,e.setAttribute)(t,"data-language",a.language?.split(" ")[0])),t}}),r),"function"==typeof o?(0,e.use)(o,r):c=r,(0,e.effect)(t=>{let o={[`language-${a.language}`]:!!a.language,"line-numbers":a.lineNumber,"not-toolbar":!a.toolbar,[a.class]:!a.edit},i=`language-${a.language}`,s=b();return t._v$=(0,e.classList)(n,o,t._v$),i!==t._v$2&&(0,e.className)(r,t._v$2=i),s!==t._v$3&&(l.data=t._v$3=s),t},{_v$:void 0,_v$2:void 0,_v$3:void 0}),n})()}function j({target:e}){let t=`${e.value}${/\n$/.test(e.value)?"​":""}`;$(t),(0,n.default)(a.onChange)&&a.onChange(t)}function N(e){c.innerHTML=e.data,_(c.getBoundingClientRect().height-(a.toolbar?40:16))}function M(){q&&(q.unobserve(c),q.disconnect())}return(0,t.createEffect)(()=>{if(a.code)try{$(decodeURIComponent(a.code))}catch(e){$(a.code)}else $("")}),(0,t.createEffect)(()=>{a.webWorker?(L||(L=E()),L.addEventListener("message",N)):q||(q=y())}),(0,t.createEffect)(()=>{if(L)L.postMessage(JSON.stringify({language:a.language,code:b()}));else{var e,t;e=a.language||"markup",(t=b())&&w()&&(M(),h.test(e)&&!i.default.languages[e]&&(i.default.languages[e]=i.default.languages.diff),N({data:i.default.highlight(`${t}
2
+ `,i.default.languages[e]||i.default.languages.markup,e)}))}}),(0,t.onMount)(()=>{c&&q?.observe(c)}),(0,t.onCleanup)(()=>{L&&(L.removeEventListener("message",N),L.terminate()),M()}),[(()=>{let t=f(),n=t.firstChild;return(0,e.effect)(()=>n.data=p()),t})(),(()=>{let t=f(),n=t.firstChild;return(0,e.effect)(()=>n.data=(0,s.default)()),t})(),(()=>{let e=v();return e.textContent=l.style,e})(),(0,e.createComponent)(t.Show,{get when(){return a.css},get children(){let t=f(),n=t.firstChild;return(0,e.effect)(()=>n.data=(0,o.css)(a.css)),t}}),(0,e.createComponent)(t.Show,{get when(){return a.edit},get fallback(){return(0,e.createComponent)(S,{})},get children(){let t=m(),n=t.firstChild;return(0,e.addEventListener)(n,"input",j,!0),(0,e.insert)(t,(0,e.createComponent)(S,{}),null),(0,e.effect)(r=>{let l=(0,o.cx)("n-editor",a.class),i=!!a.lineNumber,s=!a.toolbar,u=`${C()}px`;return l!==r._v$4&&(0,e.className)(t,r._v$4=l),i!==r._v$5&&n.classList.toggle("line-numbers",r._v$5=i),s!==r._v$6&&n.classList.toggle("not-toolbar",r._v$6=s),u!==r._v$7&&(null!=(r._v$7=u)?n.style.setProperty("height",u):n.style.removeProperty("height")),r},{_v$4:void 0,_v$5:void 0,_v$6:void 0,_v$7:void 0}),(0,e.effect)(()=>n.value=a.code),t}})]}(0,a.customElement)("n-code",{class:void 0,code:void 0,language:void 0,children:void 0,edit:void 0,toolbar:void 0,css:void 0,lineNumber:void 0,onChange:void 0,webWorker:void 0},(n,r)=>{let o=r.element,a=(0,t.mergeProps)({code:o.textContent,css:o.css,onChange(e){o.dispatchEvent(new CustomEvent("change",{detail:e}))}},n);return(0,t.createEffect)(()=>{o.replaceChildren(),o.removeAttribute("css")}),(0,e.createComponent)(p,a)});const h=p;(0,e.delegateEvents)(["click","input"]);
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/code/index.tsx"],"sourcesContent":["import {\n Show,\n createEffect,\n createSignal,\n mergeProps,\n onCleanup,\n onMount,\n untrack,\n} from 'solid-js';\nimport { isFunction, setClipboard } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport Prism from '../prism';\nimport prismCss from '../prism/css';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\nexport interface CodeProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 内容 */\n code?: string;\n /** 语言 */\n language?: string;\n /** 显示代码行号 */\n lineNumber?: boolean;\n /** 支持编辑 */\n edit?: boolean;\n /** 开启代码块工具条 */\n toolbar?: boolean;\n /** 编辑修改时的回调 */\n onChange?: (code: string) => void;\n children?: JSX.Element;\n /**\n * 使用 web worker\n * @default true\n */\n webWorker?: boolean;\n}\n\nexport type CodeElement = CustomElement<CodeProps>;\n\nfunction Code(props: CodeProps) {\n const { baseStyle } = theme;\n let codeEl: HTMLPreElement;\n const diffLang = /^diff-([\\w-]+)/i;\n const [code, setCode] = createSignal<string>('');\n const [hei, setHei] = createSignal(20);\n const [isIntersecting, setIsIntersecting] = createSignal(false);\n\n function initObserver() {\n return new IntersectionObserver((entries) => {\n setIsIntersecting(entries[0].isIntersecting);\n });\n }\n function initWorker() {\n return new Worker(new URL('./worker.ts', import.meta.url), {\n name: 'workers/prismjs',\n });\n }\n // eslint-disable-next-line solid/reactivity\n let observer = props.webWorker ? void 0 : initObserver();\n // eslint-disable-next-line solid/reactivity\n let worker: Worker | undefined = props.webWorker ? initWorker() : void 0;\n\n function copy() {\n setClipboard(untrack(code), codeEl);\n }\n function Pre() {\n return (\n <pre\n classList={{\n [`language-${props.language}`]: !!props.language,\n 'line-numbers': props.lineNumber,\n 'not-toolbar': !props.toolbar,\n [props.class as string]: !props.edit,\n }}\n >\n <Show when={props.toolbar}>\n <div class=\"toolbar\" data-language={props.language?.split(' ')[0]}>\n <button class=\"toolbar-copy\" aria-label=\"copy\" onClick={copy} />\n </div>\n </Show>\n <code ref={codeEl} class={`language-${props.language}`} textContent={code()} />\n </pre>\n );\n }\n function change({ target }: { target: HTMLTextAreaElement }) {\n const c = `${target.value}${/\\n$/.test(target.value) ? '\\u200b' : ''}`;\n\n setCode(c);\n if (isFunction(props.onChange)) {\n props.onChange(c);\n }\n }\n function update(e: { data: string }) {\n codeEl.innerHTML = e.data;\n setHei(codeEl.getBoundingClientRect().height - (props.toolbar ? 40 : 16));\n }\n function cleanObserver() {\n if (observer) {\n // 停止观察目标元素\n observer.unobserve(codeEl);\n observer.disconnect();\n }\n }\n function postMessage(language: string, value?: string) {\n if (!value || !isIntersecting()) return;\n cleanObserver();\n if (diffLang.test(language) && !Prism.languages[language]) {\n Prism.languages[language] = Prism.languages.diff;\n }\n update({\n data: Prism.highlight(\n `${value}\\n`,\n Prism.languages[language] || Prism.languages.markup,\n language,\n ),\n });\n }\n createEffect(() => {\n if (props.code) {\n try {\n setCode(decodeURIComponent(props.code));\n } catch (error) {\n setCode(props.code);\n }\n } else {\n setCode('');\n }\n });\n createEffect(() => {\n if (props.webWorker) {\n if (!worker) {\n worker = initWorker();\n }\n worker.addEventListener('message', update);\n } else if (!observer) {\n observer = initObserver();\n }\n });\n\n createEffect(() => {\n if (worker) {\n worker.postMessage(\n JSON.stringify({\n language: props.language,\n code: code(),\n }),\n );\n } else {\n postMessage(props.language || 'markup', code());\n }\n });\n onMount(() => {\n if (codeEl) {\n // 开始观察目标元素\n observer?.observe(codeEl);\n }\n });\n onCleanup(() => {\n if (worker) {\n worker.removeEventListener('message', update);\n worker.terminate();\n }\n cleanObserver();\n });\n\n return (\n <>\n <style textContent={baseStyle()} />\n <style textContent={prismCss()} />\n <style textContent={style} />\n <Show when={props.css}>\n <style textContent={css(props.css)} />\n </Show>\n <Show when={props.edit} fallback={<Pre />}>\n <div class={cx('n-editor', props.class)}>\n <textarea\n value={props.code}\n classList={{\n 'line-numbers': props.lineNumber,\n 'not-toolbar': !props.toolbar,\n }}\n style={{ height: `${hei()}px` }}\n onInput={change}\n />\n <Pre />\n </div>\n </Show>\n </>\n );\n}\n\ncustomElement<CodeProps>(\n 'n-code',\n {\n class: void 0,\n code: void 0,\n language: void 0,\n children: void 0,\n edit: void 0,\n toolbar: void 0,\n css: void 0,\n lineNumber: void 0,\n onChange: void 0,\n webWorker: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n code: el.textContent,\n css: el.css,\n onChange(val: string) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: val,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.replaceChildren();\n el.removeAttribute('css');\n });\n\n return <Code {...props} />;\n },\n);\nexport default Code;\n"],"names":["Code","props","codeEl","baseStyle","theme","diffLang","code","setCode","createSignal","hei","setHei","isIntersecting","setIsIntersecting","initObserver","IntersectionObserver","entries","initWorker","Worker","URL","name","observer","webWorker","worker","copy","setClipboard","untrack","Pre","Show","toolbar","language","split","lineNumber","class","edit","change","target","c","value","test","isFunction","onChange","update","e","innerHTML","data","getBoundingClientRect","height","cleanObserver","unobserve","disconnect","createEffect","decodeURIComponent","error","addEventListener","postMessage","JSON","stringify","Prism","languages","diff","highlight","markup","onMount","observe","onCleanup","removeEventListener","terminate","prismCss","style","css","cx","customElement","children","_","opt","el","element","mergeProps","textContent","val","dispatchEvent","CustomEvent","detail","replaceChildren","removeAttribute"],"rangeMappings":";","mappings":"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"}
1
+ {"version":3,"sources":["../../components/code/index.tsx"],"sourcesContent":["import {\n Show,\n createEffect,\n createSignal,\n mergeProps,\n onCleanup,\n onMount,\n untrack,\n} from 'solid-js';\nimport { isFunction, setClipboard } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport Prism from '../prism';\nimport prismCss from '../prism/css';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\nexport interface CodeProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 内容 */\n code?: string;\n /** 语言 */\n language?: string;\n /** 显示代码行号 */\n lineNumber?: boolean;\n /** 支持编辑 */\n edit?: boolean;\n /** 开启代码块工具条 */\n toolbar?: boolean;\n /** 编辑修改时的回调 */\n onChange?: (code: string) => void;\n children?: JSX.Element;\n /**\n * 使用 web worker\n * @default false\n */\n webWorker?: boolean;\n}\n\nexport type CodeElement = CustomElement<CodeProps>;\n\nfunction Code(props: CodeProps) {\n const { baseStyle } = theme;\n let codeEl: HTMLPreElement;\n const diffLang = /^diff-([\\w-]+)/i;\n const [code, setCode] = createSignal<string>('');\n const [hei, setHei] = createSignal(20);\n const [isIntersecting, setIsIntersecting] = createSignal(false);\n\n function initObserver() {\n return new IntersectionObserver((entries) => {\n setIsIntersecting(entries[0].isIntersecting);\n });\n }\n function initWorker() {\n return new Worker(new URL('https://cdn.jsdelivr.net/npm/neko-ui/lib/code/worker.js').href);\n }\n // eslint-disable-next-line solid/reactivity\n let observer = props.webWorker ? void 0 : initObserver();\n // eslint-disable-next-line solid/reactivity\n let worker: Worker | undefined = props.webWorker ? initWorker() : void 0;\n\n function copy() {\n setClipboard(untrack(code), codeEl);\n }\n function Pre() {\n return (\n <pre\n classList={{\n [`language-${props.language}`]: !!props.language,\n 'line-numbers': props.lineNumber,\n 'not-toolbar': !props.toolbar,\n [props.class as string]: !props.edit,\n }}\n >\n <Show when={props.toolbar}>\n <div class=\"toolbar\" data-language={props.language?.split(' ')[0]}>\n <button class=\"toolbar-copy\" aria-label=\"copy\" onClick={copy} />\n </div>\n </Show>\n <code ref={codeEl} class={`language-${props.language}`} textContent={code()} />\n </pre>\n );\n }\n function change({ target }: { target: HTMLTextAreaElement }) {\n const c = `${target.value}${/\\n$/.test(target.value) ? '\\u200b' : ''}`;\n\n setCode(c);\n if (isFunction(props.onChange)) {\n props.onChange(c);\n }\n }\n function update(e: { data: string }) {\n codeEl.innerHTML = e.data;\n setHei(codeEl.getBoundingClientRect().height - (props.toolbar ? 40 : 16));\n }\n function cleanObserver() {\n if (observer) {\n // 停止观察目标元素\n observer.unobserve(codeEl);\n observer.disconnect();\n }\n }\n function postMessage(language: string, value?: string) {\n if (!value || !isIntersecting()) return;\n cleanObserver();\n if (diffLang.test(language) && !Prism.languages[language]) {\n Prism.languages[language] = Prism.languages.diff;\n }\n update({\n data: Prism.highlight(\n `${value}\\n`,\n Prism.languages[language] || Prism.languages.markup,\n language,\n ),\n });\n }\n createEffect(() => {\n if (props.code) {\n try {\n setCode(decodeURIComponent(props.code));\n } catch (error) {\n setCode(props.code);\n }\n } else {\n setCode('');\n }\n });\n createEffect(() => {\n if (props.webWorker) {\n if (!worker) {\n worker = initWorker();\n }\n worker.addEventListener('message', update);\n } else if (!observer) {\n observer = initObserver();\n }\n });\n\n createEffect(() => {\n if (worker) {\n worker.postMessage(\n JSON.stringify({\n language: props.language,\n code: code(),\n }),\n );\n } else {\n postMessage(props.language || 'markup', code());\n }\n });\n onMount(() => {\n if (codeEl) {\n // 开始观察目标元素\n observer?.observe(codeEl);\n }\n });\n onCleanup(() => {\n if (worker) {\n worker.removeEventListener('message', update);\n worker.terminate();\n }\n cleanObserver();\n });\n\n return (\n <>\n <style textContent={baseStyle()} />\n <style textContent={prismCss()} />\n <style textContent={style} />\n <Show when={props.css}>\n <style textContent={css(props.css)} />\n </Show>\n <Show when={props.edit} fallback={<Pre />}>\n <div class={cx('n-editor', props.class)}>\n <textarea\n value={props.code}\n classList={{\n 'line-numbers': props.lineNumber,\n 'not-toolbar': !props.toolbar,\n }}\n style={{ height: `${hei()}px` }}\n onInput={change}\n />\n <Pre />\n </div>\n </Show>\n </>\n );\n}\n\ncustomElement<CodeProps>(\n 'n-code',\n {\n class: void 0,\n code: void 0,\n language: void 0,\n children: void 0,\n edit: void 0,\n toolbar: void 0,\n css: void 0,\n lineNumber: void 0,\n onChange: void 0,\n webWorker: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n code: el.textContent,\n css: el.css,\n onChange(val: string) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: val,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.replaceChildren();\n el.removeAttribute('css');\n });\n\n return <Code {...props} />;\n },\n);\nexport default Code;\n"],"names":["Code","props","codeEl","baseStyle","theme","diffLang","code","setCode","createSignal","hei","setHei","isIntersecting","setIsIntersecting","initObserver","IntersectionObserver","entries","initWorker","Worker","URL","href","observer","webWorker","worker","copy","setClipboard","untrack","Pre","Show","toolbar","language","split","lineNumber","class","edit","change","target","c","value","test","isFunction","onChange","update","e","innerHTML","data","getBoundingClientRect","height","cleanObserver","unobserve","disconnect","createEffect","decodeURIComponent","error","addEventListener","postMessage","JSON","stringify","Prism","languages","diff","highlight","markup","onMount","observe","onCleanup","removeEventListener","terminate","prismCss","style","css","cx","customElement","children","_","opt","el","element","mergeProps","textContent","val","dispatchEvent","CustomEvent","detail","replaceChildren","removeAttribute"],"rangeMappings":";","mappings":"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"}
@@ -1,3 +1,3 @@
1
- "use strict";self.importScripts(new URL("prismjs",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-bash.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-clike.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-css.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-diff.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-docker.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-git.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-javascript.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-jsx.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-latex.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-less.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-markdown.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-markup-templating.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-markup.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-regex.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-rust.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-sql.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-swift.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-toml.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-tsx.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-typescript.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-wasm.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/components/prism-yaml.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/plugins/diff-highlight/prism-diff-highlight.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/plugins/highlight-keywords/prism-highlight-keywords.js",require("url").pathToFileURL(__filename).toString()).href),self.importScripts(new URL("prismjs/plugins/line-numbers/prism-line-numbers.js",require("url").pathToFileURL(__filename).toString()).href);const e=/^diff-([\w-]+)/i;self.addEventListener("message",function(r){let i;try{let{code:s,language:t="markup"}=JSON.parse(r.data);e.test(t)&&!self.Prism.languages[t]&&(self.Prism.languages[t]=self.Prism.languages.diff),i=self.Prism.highlight(`${s}
2
- `,self.Prism.languages[t],t)}catch(e){i=""}self.postMessage(i)},!1);
1
+ "use strict";self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/prism.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-bash.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-clike.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-css.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-diff.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-docker.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-git.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-javascript.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-jsx.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-latex.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-less.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-markdown.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-markup-templating.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-markup.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-regex.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-rust.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-sql.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-swift.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-toml.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-tsx.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-typescript.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-wasm.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-yaml.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-bash.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/diff-highlight/prism-diff-highlight.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/highlight-keywords/prism-highlight-keywords.js"),self.importScripts("https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/line-numbers/prism-line-numbers.js"),self.addEventListener("message",function(s){let p;try{let{code:t,language:i="markup"}=JSON.parse(s.data);/^diff-([\w-]+)/i.test(i)&&!self.Prism.languages[i]&&(self.Prism.languages[i]=self.Prism.languages.diff),p=self.Prism.highlight(`${t}
2
+ `,self.Prism.languages[i],i)}catch(s){p=""}self.postMessage(p)},!1);
3
3
  //# sourceMappingURL=worker.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/code/worker.ts"],"sourcesContent":["self.importScripts(new URL('prismjs', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-bash.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-clike.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-css.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-diff.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-docker.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-git.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-javascript.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-jsx.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-latex.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-less.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-markdown.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-markup-templating.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-markup.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-regex.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-rust.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-sql.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-swift.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-toml.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-tsx.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-typescript.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-wasm.js', import.meta.url).href);\nself.importScripts(new URL('prismjs/components/prism-yaml.js', import.meta.url).href);\n// plugins\nself.importScripts(\n new URL('prismjs/plugins/diff-highlight/prism-diff-highlight.js', import.meta.url).href,\n);\nself.importScripts(\n new URL('prismjs/plugins/highlight-keywords/prism-highlight-keywords.js', import.meta.url).href,\n);\nself.importScripts(\n new URL('prismjs/plugins/line-numbers/prism-line-numbers.js', import.meta.url).href,\n);\nconst diffLang = /^diff-([\\w-]+)/i;\n\nfunction onMessage(e: MessageEvent<string>) {\n let result;\n\n try {\n const { code, language = 'markup' } = JSON.parse(e.data) as {\n code: string;\n language: string;\n };\n\n if (diffLang.test(language) && !self.Prism.languages[language]) {\n self.Prism.languages[language] = self.Prism.languages.diff;\n }\n\n result = self.Prism.highlight(`${code}\\n`, self.Prism.languages[language], language);\n } catch (error) {\n result = '';\n }\n self.postMessage(result); // 向主线程发送消息\n}\n\nself.addEventListener('message', onMessage, false);\n"],"names":["self","importScripts","URL","href","diffLang","addEventListener","e","result","code","language","JSON","parse","data","test","Prism","languages","diff","highlight","error","postMessage"],"rangeMappings":";","mappings":"aAAAA,KAAKC,aAAa,CAAC,IAAIC,IAAI,UAAW,qDAAiBC,IAAI,EAC3DH,KAAKC,aAAa,CAAC,IAAIC,IAAI,mCAAoC,qDAAiBC,IAAI,EACpFH,KAAKC,aAAa,CAAC,IAAIC,IAAI,oCAAqC,qDAAiBC,IAAI,EACrFH,KAAKC,aAAa,CAAC,IAAIC,IAAI,kCAAmC,qDAAiBC,IAAI,EACnFH,KAAKC,aAAa,CAAC,IAAIC,IAAI,mCAAoC,qDAAiBC,IAAI,EACpFH,KAAKC,aAAa,CAAC,IAAIC,IAAI,qCAAsC,qDAAiBC,IAAI,EACtFH,KAAKC,aAAa,CAAC,IAAIC,IAAI,kCAAmC,qDAAiBC,IAAI,EACnFH,KAAKC,aAAa,CAAC,IAAIC,IAAI,yCAA0C,qDAAiBC,IAAI,EAC1FH,KAAKC,aAAa,CAAC,IAAIC,IAAI,kCAAmC,qDAAiBC,IAAI,EACnFH,KAAKC,aAAa,CAAC,IAAIC,IAAI,oCAAqC,qDAAiBC,IAAI,EACrFH,KAAKC,aAAa,CAAC,IAAIC,IAAI,mCAAoC,qDAAiBC,IAAI,EACpFH,KAAKC,aAAa,CAAC,IAAIC,IAAI,uCAAwC,qDAAiBC,IAAI,EACxFH,KAAKC,aAAa,CAAC,IAAIC,IAAI,gDAAiD,qDAAiBC,IAAI,EACjGH,KAAKC,aAAa,CAAC,IAAIC,IAAI,qCAAsC,qDAAiBC,IAAI,EACtFH,KAAKC,aAAa,CAAC,IAAIC,IAAI,oCAAqC,qDAAiBC,IAAI,EACrFH,KAAKC,aAAa,CAAC,IAAIC,IAAI,mCAAoC,qDAAiBC,IAAI,EACpFH,KAAKC,aAAa,CAAC,IAAIC,IAAI,kCAAmC,qDAAiBC,IAAI,EACnFH,KAAKC,aAAa,CAAC,IAAIC,IAAI,oCAAqC,qDAAiBC,IAAI,EACrFH,KAAKC,aAAa,CAAC,IAAIC,IAAI,mCAAoC,qDAAiBC,IAAI,EACpFH,KAAKC,aAAa,CAAC,IAAIC,IAAI,kCAAmC,qDAAiBC,IAAI,EACnFH,KAAKC,aAAa,CAAC,IAAIC,IAAI,yCAA0C,qDAAiBC,IAAI,EAC1FH,KAAKC,aAAa,CAAC,IAAIC,IAAI,mCAAoC,qDAAiBC,IAAI,EACpFH,KAAKC,aAAa,CAAC,IAAIC,IAAI,mCAAoC,qDAAiBC,IAAI,EAEpFH,KAAKC,aAAa,CAChB,IAAIC,IAAI,yDAA0D,qDAAiBC,IAAI,EAEzFH,KAAKC,aAAa,CAChB,IAAIC,IAAI,iEAAkE,qDAAiBC,IAAI,EAEjGH,KAAKC,aAAa,CAChB,IAAIC,IAAI,qDAAsD,qDAAiBC,IAAI,EAErF,MAAMC,EAAW,kBAsBjBJ,KAAKK,gBAAgB,CAAC,UApBtB,SAAmBC,CAAuB,EACxC,IAAIC,EAEJ,GAAI,CACF,GAAM,CAAEC,KAAAA,CAAI,CAAEC,SAAAA,EAAW,QAAQ,CAAE,CAAGC,KAAKC,KAAK,CAACL,EAAEM,IAAI,EAKnDR,EAASS,IAAI,CAACJ,IAAa,CAACT,KAAKc,KAAK,CAACC,SAAS,CAACN,EAAS,EAC5DT,CAAAA,KAAKc,KAAK,CAACC,SAAS,CAACN,EAAS,CAAGT,KAAKc,KAAK,CAACC,SAAS,CAACC,IAAI,AAAD,EAG3DT,EAASP,KAAKc,KAAK,CAACG,SAAS,CAAC,CAAC,EAAET,EAAK;AAAE,CAAC,CAAER,KAAKc,KAAK,CAACC,SAAS,CAACN,EAAS,CAAEA,EAC7E,CAAE,MAAOS,EAAO,CACdX,EAAS,EACX,CACAP,KAAKmB,WAAW,CAACZ,EACnB,EAE4C,CAAA"}
1
+ {"version":3,"sources":["../../components/code/worker.ts"],"sourcesContent":["self.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/prism.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-bash.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-clike.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-css.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-diff.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-docker.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-git.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-javascript.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-jsx.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-latex.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-less.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-markdown.js');\nself.importScripts(\n 'https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-markup-templating.js',\n);\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-markup.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-regex.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-rust.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-sql.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-swift.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-toml.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-tsx.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-typescript.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-wasm.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-yaml.js');\nself.importScripts('https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-bash.js');\n// plugins\nself.importScripts(\n 'https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/diff-highlight/prism-diff-highlight.js',\n);\nself.importScripts(\n 'https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/highlight-keywords/prism-highlight-keywords.js',\n);\nself.importScripts(\n 'https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/line-numbers/prism-line-numbers.js',\n);\n\nfunction onMessage(e: MessageEvent<string>) {\n let result;\n\n try {\n const { code, language = 'markup' } = JSON.parse(e.data) as {\n code: string;\n language: string;\n };\n\n if (/^diff-([\\w-]+)/i.test(language) && !self.Prism.languages[language]) {\n self.Prism.languages[language] = self.Prism.languages.diff;\n }\n\n result = self.Prism.highlight(`${code}\\n`, self.Prism.languages[language], language);\n } catch (error) {\n result = '';\n }\n self.postMessage(result); // 向主线程发送消息\n}\n\nself.addEventListener('message', onMessage, false);\n"],"names":["self","importScripts","addEventListener","e","result","code","language","JSON","parse","data","test","Prism","languages","diff","highlight","error","postMessage"],"rangeMappings":";","mappings":"aAAAA,KAAKC,aAAa,CAAC,wDACnBD,KAAKC,aAAa,CAAC,wEACnBD,KAAKC,aAAa,CAAC,yEACnBD,KAAKC,aAAa,CAAC,uEACnBD,KAAKC,aAAa,CAAC,wEACnBD,KAAKC,aAAa,CAAC,0EACnBD,KAAKC,aAAa,CAAC,uEACnBD,KAAKC,aAAa,CAAC,8EACnBD,KAAKC,aAAa,CAAC,uEACnBD,KAAKC,aAAa,CAAC,yEACnBD,KAAKC,aAAa,CAAC,wEACnBD,KAAKC,aAAa,CAAC,4EACnBD,KAAKC,aAAa,CAChB,qFAEFD,KAAKC,aAAa,CAAC,0EACnBD,KAAKC,aAAa,CAAC,yEACnBD,KAAKC,aAAa,CAAC,wEACnBD,KAAKC,aAAa,CAAC,uEACnBD,KAAKC,aAAa,CAAC,yEACnBD,KAAKC,aAAa,CAAC,wEACnBD,KAAKC,aAAa,CAAC,uEACnBD,KAAKC,aAAa,CAAC,8EACnBD,KAAKC,aAAa,CAAC,wEACnBD,KAAKC,aAAa,CAAC,wEACnBD,KAAKC,aAAa,CAAC,wEAEnBD,KAAKC,aAAa,CAChB,8FAEFD,KAAKC,aAAa,CAChB,sGAEFD,KAAKC,aAAa,CAChB,0FAuBFD,KAAKE,gBAAgB,CAAC,UApBtB,SAAmBC,CAAuB,EACxC,IAAIC,EAEJ,GAAI,CACF,GAAM,CAAEC,KAAAA,CAAI,CAAEC,SAAAA,EAAW,QAAQ,CAAE,CAAGC,KAAKC,KAAK,CAACL,EAAEM,IAAI,EAKnD,kBAAkBC,IAAI,CAACJ,IAAa,CAACN,KAAKW,KAAK,CAACC,SAAS,CAACN,EAAS,EACrEN,CAAAA,KAAKW,KAAK,CAACC,SAAS,CAACN,EAAS,CAAGN,KAAKW,KAAK,CAACC,SAAS,CAACC,IAAI,AAAD,EAG3DT,EAASJ,KAAKW,KAAK,CAACG,SAAS,CAAC,CAAC,EAAET,EAAK;AAAE,CAAC,CAAEL,KAAKW,KAAK,CAACC,SAAS,CAACN,EAAS,CAAEA,EAC7E,CAAE,MAAOS,EAAO,CACdX,EAAS,EACX,CACAJ,KAAKgB,WAAW,CAACZ,EACnB,EAE4C,CAAA"}
package/lib/md/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return p}});const e=require("solid-js/web"),t=require("solid-js"),r=l(require("@moneko/common/lib/frameCallback")),n=require("@moneko/css"),o=require("solid-element");require("../code"),require("../img");const a=l(require("../md-style")),i=l(require("../theme"));function l(e){return e&&e.__esModule?e:{default:e}}function c(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(c=function(e){return e?r:t})(e)}const s=(0,e.template)("<style> "),u=(0,e.template)("<style>"),d=(0,e.template)('<article class="n-md-box" part="box"><div class="n-md-body" part="body">'),f=(0,e.template)('<article part="box">');function h(o){let l,h;let{baseStyle:p}=i.default,m=(0,t.mergeProps)({webWorker:!1,pictureViewer:!0,lazyPicture:!0,text:"",tools:["copy"],getAnchorContainer:()=>window},o);function g(){return new Worker(new URL("./worker.ts",require("url").pathToFileURL(__filename).toString()),{name:"workers/marked-completed"})}let b=m.webWorker?g():void 0;function v(e){h&&(h.innerHTML=e.data)}async function w(e){let{text:t,pictureViewer:r,lazyPicture:n,langToolbar:o,...a}=e,i=(await Promise.resolve().then(()=>(function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=c(void 0);if(r&&r.has(e))return r.get(e);var n={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var i=o?Object.getOwnPropertyDescriptor(e,a):null;i&&(i.get||i.set)?Object.defineProperty(n,a,i):n[a]=e[a]}return n.default=e,r&&r.set(e,n),n})(require("marked-completed")))).default;l||((l=new i.Renderer).katexBlock=e=>`<n-katex display-mode="true">${e}</n-katex>`,l.katexInline=e=>`<n-katex>${e}</n-katex>`),l.image=(e,t,o)=>`<n-img lazy="${n}" disabled="${!r}" role="img" src="${e}" alt="${o}" ${t?`title="${t}"`:""}></n-img>`;let s=!!o?.length;l.code=function(e,t){return"treeview"===t?`<n-tree data="${e}" />`:`<n-code class="n-code" toolbar="${s}" language="${t}" ${a.langLineNumber?'line-number="true"':""}>${encodeURIComponent(e)}</n-code>`},v({data:i(t,{renderer:l,langToolbar:o,headerPrefix:"# ",breaks:!0,pedantic:!1,smartLists:!0,smartypants:!0,xhtml:!0,...a})})}(0,t.createEffect)(()=>{m.webWorker&&(b||(b=g()),b.addEventListener("message",v))}),(0,t.createEffect)(()=>{b?b.postMessage(JSON.stringify({text:m.text,langLineNumber:m.lineNumber,langToolbar:m.tools,pictureViewer:m.pictureViewer,lazyPicture:m.lazyPicture})):(0,r.default)(()=>w({text:m.text,langLineNumber:m.lineNumber,langToolbar:m.tools,pictureViewer:m.pictureViewer,lazyPicture:m.lazyPicture}))}),(0,t.onCleanup)(()=>{b&&(b.removeEventListener("message",v),b.terminate())});let y=[],x=[],k=[];function C(e){e.preventDefault(),e.stopPropagation();let t=e.target;t.hash?(h?.querySelector(decodeURIComponent(t.hash))?.scrollIntoView({behavior:"smooth",block:"nearest"}),y.forEach(e=>e.classList.remove("active")),t.classList.add("active")):window.open(t.href)}function P(e){e.forEach(e=>{let t;let r=e.target.getAttribute("id"),n=e.target.querySelectorAll("a");if(y.forEach(e=>{e.hash===`#${r}`?t=e:e.hash||n.forEach(r=>{r.href===e.href&&(t=e)})}),t){let r=k.indexOf(t);k.forEach(e=>{e.classList.remove("active")}),e.isIntersecting?k.push(t):-1!==r&&k.splice(r,1),k[0]&&(k[0].classList.add("active"),k[0].offsetParent?.scrollTo({top:k[0].offsetTop}))}})}return(0,t.createEffect)(()=>{let e;h&&m.text?.startsWith("[TOC]")&&(y=[...h.querySelectorAll(".n-md-toc a[href]")],x=[...h.querySelectorAll("h1, h2, h3, h4, h5, h6")],e=new IntersectionObserver(P,{rootMargin:"-50px 0px",threshold:.5}),x.forEach(t=>e.observe(t)),y.forEach(e=>{e.addEventListener("click",C)})),(0,t.onCleanup)(()=>{e&&(x.forEach(t=>e.unobserve(t)),e.disconnect()),y.forEach(e=>{e.removeEventListener("click",C)})})}),[(()=>{let t=s(),r=t.firstChild;return(0,e.effect)(()=>r.data=p()),t})(),(()=>{let e=u();return e.textContent=a.default,e})(),(0,e.createComponent)(t.Show,{get when(){return m.css},get children(){let t=s(),r=t.firstChild;return(0,e.effect)(()=>r.data=(0,n.css)(m.css)),t}}),(0,e.createComponent)(t.Switch,{get children(){return[(0,e.createComponent)(t.Match,{get when(){return m.children?.length},get children(){let r=d(),n=r.firstChild;return(0,e.insert)(n,(0,e.createComponent)(t.For,{get each(){return m.children},children:e=>e})),r}}),(0,e.createComponent)(t.Match,{get when(){return m.text},get children(){let t=f(),r=h;return"function"==typeof r?(0,e.use)(r,t):h=t,(0,e.effect)(()=>(0,e.className)(t,(0,n.cx)("n-md-box",m.class))),t}})]}})]}(0,o.customElement)("n-md",{class:void 0,pictureViewer:void 0,lazyPicture:void 0,lineNumber:!0,text:void 0,tools:void 0,getAnchorContainer:void 0,css:void 0,children:void 0,notRender:void 0,webWorker:void 0},(r,n)=>{let o=n.element,a=(0,t.mergeProps)({text:!r.notRender&&o.textContent||o.text,css:o.css,tools:o.tools,getAnchorContainer:o.getAnchorContainer},r);return(0,t.createEffect)(()=>{o.removeAttribute("css"),o.replaceChildren()}),(0,e.createComponent)(h,a)});const p=h;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return p}});const e=require("solid-js/web"),t=require("solid-js"),r=l(require("@moneko/common/lib/frameCallback")),n=require("@moneko/css"),o=require("solid-element");require("../code"),require("../img");const i=l(require("../md-style")),a=l(require("../theme"));function l(e){return e&&e.__esModule?e:{default:e}}function c(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(c=function(e){return e?r:t})(e)}const s=(0,e.template)("<style> "),u=(0,e.template)("<style>"),d=(0,e.template)('<article class="n-md-box" part="box"><div class="n-md-body" part="body">'),f=(0,e.template)('<article part="box">');function h(o){let l,h;let{baseStyle:p}=a.default,m=(0,t.mergeProps)({webWorker:!1,pictureViewer:!0,lazyPicture:!0,text:"",tools:["copy"],getAnchorContainer:()=>window},o);function g(){return new Worker("https://cdn.jsdelivr.net/npm/neko-ui/lib/md/worker.js")}let b=m.webWorker?g():void 0;function v(e){h&&(h.innerHTML=e.data)}async function y(e){let{text:t,pictureViewer:r,lazyPicture:n,langToolbar:o,...i}=e,a=(await Promise.resolve().then(()=>(function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=c(void 0);if(r&&r.has(e))return r.get(e);var n={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var a=o?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(n,i,a):n[i]=e[i]}return n.default=e,r&&r.set(e,n),n})(require("marked-completed")))).default;l||((l=new a.Renderer).katexBlock=e=>`<n-katex display-mode="true">${e}</n-katex>`,l.katexInline=e=>`<n-katex>${e}</n-katex>`),l.image=(e,t,o)=>`<n-img lazy="${n}" disabled="${!r}" role="img" src="${e}" alt="${o}" ${t?`title="${t}"`:""}></n-img>`;let s=!!o?.length;l.code=function(e,t){return"treeview"===t?`<n-tree data="${e}" />`:`<n-code class="n-code" toolbar="${s}" language="${t}" ${i.langLineNumber?'line-number="true"':""}>${encodeURIComponent(e)}</n-code>`},v({data:a(t,{renderer:l,langToolbar:o,headerPrefix:"# ",breaks:!0,pedantic:!1,smartLists:!0,smartypants:!0,xhtml:!0,...i})})}(0,t.createEffect)(()=>{m.webWorker&&(b||(b=g()),b.addEventListener("message",v))}),(0,t.createEffect)(()=>{b?b.postMessage(JSON.stringify({text:m.text,langLineNumber:m.lineNumber,langToolbar:m.tools,pictureViewer:m.pictureViewer,lazyPicture:m.lazyPicture})):(0,r.default)(()=>y({text:m.text,langLineNumber:m.lineNumber,langToolbar:m.tools,pictureViewer:m.pictureViewer,lazyPicture:m.lazyPicture}))}),(0,t.onCleanup)(()=>{b&&(b.removeEventListener("message",v),b.terminate())});let w=[],x=[],k=[];function C(e){e.preventDefault(),e.stopPropagation();let t=e.target;t.hash?(h?.querySelector(decodeURIComponent(t.hash))?.scrollIntoView({behavior:"smooth",block:"nearest"}),w.forEach(e=>e.classList.remove("active")),t.classList.add("active")):window.open(t.href)}function P(e){e.forEach(e=>{let t;let r=e.target.getAttribute("id"),n=e.target.querySelectorAll("a");if(w.forEach(e=>{e.hash===`#${r}`?t=e:e.hash||n.forEach(r=>{r.href===e.href&&(t=e)})}),t){let r=k.indexOf(t);k.forEach(e=>{e.classList.remove("active")}),e.isIntersecting?k.push(t):-1!==r&&k.splice(r,1),k[0]&&(k[0].classList.add("active"),k[0].offsetParent?.scrollTo({top:k[0].offsetTop}))}})}return(0,t.createEffect)(()=>{let e;h&&m.text?.startsWith("[TOC]")&&(w=[...h.querySelectorAll(".n-md-toc a[href]")],x=[...h.querySelectorAll("h1, h2, h3, h4, h5, h6")],e=new IntersectionObserver(P,{rootMargin:"-50px 0px",threshold:.5}),x.forEach(t=>e.observe(t)),w.forEach(e=>{e.addEventListener("click",C)})),(0,t.onCleanup)(()=>{e&&(x.forEach(t=>e.unobserve(t)),e.disconnect()),w.forEach(e=>{e.removeEventListener("click",C)})})}),[(()=>{let t=s(),r=t.firstChild;return(0,e.effect)(()=>r.data=p()),t})(),(()=>{let e=u();return e.textContent=i.default,e})(),(0,e.createComponent)(t.Show,{get when(){return m.css},get children(){let t=s(),r=t.firstChild;return(0,e.effect)(()=>r.data=(0,n.css)(m.css)),t}}),(0,e.createComponent)(t.Switch,{get children(){return[(0,e.createComponent)(t.Match,{get when(){return m.children?.length},get children(){let r=d(),n=r.firstChild;return(0,e.insert)(n,(0,e.createComponent)(t.For,{get each(){return m.children},children:e=>e})),r}}),(0,e.createComponent)(t.Match,{get when(){return m.text},get children(){let t=f(),r=h;return"function"==typeof r?(0,e.use)(r,t):h=t,(0,e.effect)(()=>(0,e.className)(t,(0,n.cx)("n-md-box",m.class))),t}})]}})]}(0,o.customElement)("n-md",{class:void 0,pictureViewer:void 0,lazyPicture:void 0,lineNumber:!0,text:void 0,tools:void 0,getAnchorContainer:void 0,css:void 0,children:void 0,notRender:void 0,webWorker:void 0},(r,n)=>{let o=n.element,i=(0,t.mergeProps)({text:!r.notRender&&o.textContent||o.text,css:o.css,tools:o.tools,getAnchorContainer:o.getAnchorContainer},r);return(0,t.createEffect)(()=>{o.removeAttribute("css"),o.replaceChildren()}),(0,e.createComponent)(h,i)});const p=h;
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/md/index.tsx"],"sourcesContent":["import { For, Match, Show, Switch, createEffect, mergeProps, onCleanup } from 'solid-js';\nimport { frameCallback } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport '../code';\nimport '../img';\nimport mdStyle from '../md-style';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\nfunction MD(_props: MdProps) {\n let renderer: marked.Renderer | undefined;\n let ref: HTMLDivElement | undefined;\n const { baseStyle } = theme;\n const props = mergeProps(\n {\n webWorker: false,\n pictureViewer: true,\n lazyPicture: true,\n text: '',\n tools: ['copy'],\n getAnchorContainer: () => window as unknown as HTMLElement,\n },\n _props,\n );\n\n function initWorker() {\n return new Worker(new URL('./worker.ts', import.meta.url), {\n name: 'workers/marked-completed',\n });\n }\n // eslint-disable-next-line solid/reactivity\n let worker: Worker | undefined = props.webWorker ? initWorker() : void 0;\n\n function update(e: { data: string }) {\n if (ref) {\n ref.innerHTML = e.data;\n }\n }\n async function postMessage(opt: {\n text: string;\n pictureViewer?: boolean;\n lazyPicture?: boolean;\n langToolbar?: string[];\n langLineNumber?: boolean;\n }) {\n const { text, pictureViewer, lazyPicture, langToolbar, ...options } = opt;\n const marked = (await import('marked-completed')).default;\n\n if (!renderer) {\n renderer = new marked.Renderer();\n\n renderer.katexBlock = (code: string) => {\n return `<n-katex display-mode=\"true\">${code}</n-katex>`;\n };\n renderer.katexInline = (code: string) => {\n return `<n-katex>${code}</n-katex>`;\n };\n }\n\n renderer.image = (src: string, title: string, alt: string) => {\n return `<n-img lazy=\"${lazyPicture}\" disabled=\"${!pictureViewer}\" role=\"img\" src=\"${src}\" alt=\"${alt}\" ${title ? `title=\"${title}\"` : ''}></n-img>`;\n };\n const toolbar = !!langToolbar?.length;\n\n renderer.code = function (code: string, lang: string) {\n if (lang === 'treeview') {\n return `<n-tree data=\"${code}\" />`;\n }\n\n return `<n-code class=\"n-code\" toolbar=\"${toolbar}\" language=\"${lang}\" ${\n options.langLineNumber ? 'line-number=\"true\"' : ''\n }>${encodeURIComponent(code)}</n-code>`;\n };\n\n update({\n data: marked(text, {\n renderer: renderer,\n langToolbar: langToolbar,\n headerPrefix: '# ',\n breaks: true,\n pedantic: false,\n smartLists: true,\n smartypants: true,\n xhtml: true,\n ...options,\n }),\n });\n }\n createEffect(() => {\n if (props.webWorker) {\n if (!worker) {\n worker = initWorker();\n }\n worker.addEventListener('message', update);\n }\n });\n\n createEffect(() => {\n if (worker) {\n worker.postMessage(\n JSON.stringify({\n text: props.text,\n langLineNumber: props.lineNumber,\n langToolbar: props.tools,\n pictureViewer: props.pictureViewer,\n lazyPicture: props.lazyPicture,\n }),\n );\n } else {\n const call = () =>\n postMessage({\n text: props.text,\n langLineNumber: props.lineNumber,\n langToolbar: props.tools,\n pictureViewer: props.pictureViewer,\n lazyPicture: props.lazyPicture,\n });\n\n frameCallback(call);\n }\n });\n onCleanup(() => {\n if (worker) {\n worker.removeEventListener('message', update);\n worker.terminate();\n }\n });\n let list: HTMLAnchorElement[] = [];\n let heading: HTMLHeadingElement[] = [];\n const active: HTMLAnchorElement[] = [];\n\n function handleAnchor(e: Event) {\n e.preventDefault();\n e.stopPropagation();\n const a = e.target as HTMLAnchorElement;\n\n if (a.hash) {\n ref?.querySelector(decodeURIComponent(a.hash))?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n });\n list.forEach((item) => item.classList.remove('active'));\n a.classList.add('active');\n } else {\n window.open(a.href);\n }\n }\n function observerEntry(entries: IntersectionObserverEntry[]) {\n entries.forEach((entry) => {\n const id = entry.target.getAttribute('id');\n const all = entry.target.querySelectorAll('a');\n let a: HTMLAnchorElement | undefined;\n\n list.forEach((l) => {\n if (l.hash === `#${id}`) {\n a = l;\n } else if (!l.hash) {\n all.forEach((e) => {\n if (e.href === l.href) {\n a = l;\n }\n });\n }\n });\n if (a) {\n const idx = active.indexOf(a);\n\n active.forEach((e) => {\n e.classList.remove('active');\n });\n if (entry.isIntersecting) {\n active.push(a);\n } else if (idx !== -1) {\n active.splice(idx, 1);\n }\n if (active[0]) {\n active[0].classList.add('active');\n active[0].offsetParent?.scrollTo({\n top: active[0].offsetTop,\n });\n }\n }\n });\n }\n createEffect(() => {\n let observer: IntersectionObserver;\n\n if (ref && props.text?.startsWith('[TOC]')) {\n list = [...ref.querySelectorAll<HTMLAnchorElement>('.n-md-toc a[href]')];\n heading = [...ref.querySelectorAll<HTMLHeadingElement>('h1, h2, h3, h4, h5, h6')];\n observer = new IntersectionObserver(observerEntry, {\n rootMargin: '-50px 0px',\n threshold: 0.5,\n });\n heading.forEach((e) => observer.observe(e));\n list.forEach((e) => {\n e.addEventListener('click', handleAnchor);\n });\n }\n onCleanup(() => {\n if (observer) {\n heading.forEach((e) => observer.unobserve(e));\n observer.disconnect();\n }\n list.forEach((e) => {\n e.removeEventListener('click', handleAnchor);\n });\n });\n });\n\n return (\n <>\n <style textContent={baseStyle()} />\n <style textContent={mdStyle} />\n <Show when={props.css}>\n <style textContent={css(props.css)} />\n </Show>\n <Switch>\n <Match when={(props.children as [])?.length}>\n <article class=\"n-md-box\" part=\"box\">\n <div class=\"n-md-body\" part=\"body\">\n <For each={props.children as []}>{(e) => e}</For>\n </div>\n </article>\n </Match>\n <Match when={props.text}>\n <article ref={ref} class={cx('n-md-box', props.class)} part=\"box\" />\n </Match>\n </Switch>\n </>\n );\n}\n\nexport interface MdProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** md内容 */\n text?: string;\n /** 开启图片查看器\n * @since 2.0.8\n * @default true\n */\n pictureViewer?: boolean;\n /** 开启图片懒加载\n * @since 2.8.3\n * @default true\n */\n lazyPicture?: boolean;\n /** 显示代码块行号\n * @default true\n */\n lineNumber?: boolean;\n /** 开启代码块工具条\n * @default ['copy']\n */\n tools?: 'copy'[];\n /** 指定滚动的容器\n * @default () => window\n */\n getAnchorContainer?: () => HTMLElement;\n /** 不进行解析\n * @default false\n */\n notRender?: boolean;\n children?: JSX.Element;\n /**\n * 使用 web worker\n */\n webWorker?: boolean;\n}\n\nexport type MdElement = CustomElement<MdProps>;\n\ncustomElement<MdProps>(\n 'n-md',\n {\n class: void 0,\n pictureViewer: void 0,\n lazyPicture: void 0,\n lineNumber: true,\n text: void 0,\n tools: void 0,\n getAnchorContainer: void 0,\n css: void 0,\n children: void 0,\n notRender: void 0,\n webWorker: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n text: (!_.notRender && el.textContent) || el.text,\n css: el.css,\n tools: el.tools,\n getAnchorContainer: el.getAnchorContainer,\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n el.replaceChildren();\n });\n return <MD {...props} />;\n },\n);\nexport default MD;\n"],"names":["MD","_props","renderer","ref","baseStyle","theme","props","mergeProps","webWorker","pictureViewer","lazyPicture","text","tools","getAnchorContainer","window","initWorker","Worker","URL","name","worker","update","e","innerHTML","data","postMessage","opt","langToolbar","options","marked","default","Renderer","katexBlock","code","katexInline","image","src","title","alt","toolbar","length","lang","langLineNumber","encodeURIComponent","headerPrefix","breaks","pedantic","smartLists","smartypants","xhtml","createEffect","addEventListener","JSON","stringify","lineNumber","frameCallback","onCleanup","removeEventListener","terminate","list","heading","active","handleAnchor","preventDefault","stopPropagation","a","target","hash","querySelector","decodeURIComponent","scrollIntoView","behavior","block","forEach","item","classList","remove","add","open","href","observerEntry","entries","entry","id","getAttribute","all","querySelectorAll","l","idx","indexOf","isIntersecting","push","splice","offsetParent","scrollTo","top","offsetTop","observer","startsWith","IntersectionObserver","rootMargin","threshold","observe","unobserve","disconnect","mdStyle","Show","css","Switch","Match","children","For","cx","class","customElement","notRender","_","el","element","textContent","removeAttribute","replaceChildren"],"rangeMappings":"","mappings":"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"}
1
+ {"version":3,"sources":["../../components/md/index.tsx"],"sourcesContent":["import { For, Match, Show, Switch, createEffect, mergeProps, onCleanup } from 'solid-js';\nimport { frameCallback } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport '../code';\nimport '../img';\nimport mdStyle from '../md-style';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\nfunction MD(_props: MdProps) {\n let renderer: marked.Renderer | undefined;\n let ref: HTMLDivElement | undefined;\n const { baseStyle } = theme;\n const props = mergeProps(\n {\n webWorker: false,\n pictureViewer: true,\n lazyPicture: true,\n text: '',\n tools: ['copy'],\n getAnchorContainer: () => window as unknown as HTMLElement,\n },\n _props,\n );\n\n function initWorker() {\n return new Worker('https://cdn.jsdelivr.net/npm/neko-ui/lib/md/worker.js');\n }\n // eslint-disable-next-line solid/reactivity\n let worker: Worker | undefined = props.webWorker ? initWorker() : void 0;\n\n function update(e: { data: string }) {\n if (ref) {\n ref.innerHTML = e.data;\n }\n }\n async function postMessage(opt: {\n text: string;\n pictureViewer?: boolean;\n lazyPicture?: boolean;\n langToolbar?: string[];\n langLineNumber?: boolean;\n }) {\n const { text, pictureViewer, lazyPicture, langToolbar, ...options } = opt;\n const marked = (await import('marked-completed')).default;\n\n if (!renderer) {\n renderer = new marked.Renderer();\n\n renderer.katexBlock = (code: string) => {\n return `<n-katex display-mode=\"true\">${code}</n-katex>`;\n };\n renderer.katexInline = (code: string) => {\n return `<n-katex>${code}</n-katex>`;\n };\n }\n\n renderer.image = (src: string, title: string, alt: string) => {\n return `<n-img lazy=\"${lazyPicture}\" disabled=\"${!pictureViewer}\" role=\"img\" src=\"${src}\" alt=\"${alt}\" ${title ? `title=\"${title}\"` : ''}></n-img>`;\n };\n const toolbar = !!langToolbar?.length;\n\n renderer.code = function (code: string, lang: string) {\n if (lang === 'treeview') {\n return `<n-tree data=\"${code}\" />`;\n }\n\n return `<n-code class=\"n-code\" toolbar=\"${toolbar}\" language=\"${lang}\" ${\n options.langLineNumber ? 'line-number=\"true\"' : ''\n }>${encodeURIComponent(code)}</n-code>`;\n };\n\n update({\n data: marked(text, {\n renderer: renderer,\n langToolbar: langToolbar,\n headerPrefix: '# ',\n breaks: true,\n pedantic: false,\n smartLists: true,\n smartypants: true,\n xhtml: true,\n ...options,\n }),\n });\n }\n createEffect(() => {\n if (props.webWorker) {\n if (!worker) {\n worker = initWorker();\n }\n worker.addEventListener('message', update);\n }\n });\n\n createEffect(() => {\n if (worker) {\n worker.postMessage(\n JSON.stringify({\n text: props.text,\n langLineNumber: props.lineNumber,\n langToolbar: props.tools,\n pictureViewer: props.pictureViewer,\n lazyPicture: props.lazyPicture,\n }),\n );\n } else {\n const call = () =>\n postMessage({\n text: props.text,\n langLineNumber: props.lineNumber,\n langToolbar: props.tools,\n pictureViewer: props.pictureViewer,\n lazyPicture: props.lazyPicture,\n });\n\n frameCallback(call);\n }\n });\n onCleanup(() => {\n if (worker) {\n worker.removeEventListener('message', update);\n worker.terminate();\n }\n });\n let list: HTMLAnchorElement[] = [];\n let heading: HTMLHeadingElement[] = [];\n const active: HTMLAnchorElement[] = [];\n\n function handleAnchor(e: Event) {\n e.preventDefault();\n e.stopPropagation();\n const a = e.target as HTMLAnchorElement;\n\n if (a.hash) {\n ref?.querySelector(decodeURIComponent(a.hash))?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n });\n list.forEach((item) => item.classList.remove('active'));\n a.classList.add('active');\n } else {\n window.open(a.href);\n }\n }\n function observerEntry(entries: IntersectionObserverEntry[]) {\n entries.forEach((entry) => {\n const id = entry.target.getAttribute('id');\n const all = entry.target.querySelectorAll('a');\n let a: HTMLAnchorElement | undefined;\n\n list.forEach((l) => {\n if (l.hash === `#${id}`) {\n a = l;\n } else if (!l.hash) {\n all.forEach((e) => {\n if (e.href === l.href) {\n a = l;\n }\n });\n }\n });\n if (a) {\n const idx = active.indexOf(a);\n\n active.forEach((e) => {\n e.classList.remove('active');\n });\n if (entry.isIntersecting) {\n active.push(a);\n } else if (idx !== -1) {\n active.splice(idx, 1);\n }\n if (active[0]) {\n active[0].classList.add('active');\n active[0].offsetParent?.scrollTo({\n top: active[0].offsetTop,\n });\n }\n }\n });\n }\n createEffect(() => {\n let observer: IntersectionObserver;\n\n if (ref && props.text?.startsWith('[TOC]')) {\n list = [...ref.querySelectorAll<HTMLAnchorElement>('.n-md-toc a[href]')];\n heading = [...ref.querySelectorAll<HTMLHeadingElement>('h1, h2, h3, h4, h5, h6')];\n observer = new IntersectionObserver(observerEntry, {\n rootMargin: '-50px 0px',\n threshold: 0.5,\n });\n heading.forEach((e) => observer.observe(e));\n list.forEach((e) => {\n e.addEventListener('click', handleAnchor);\n });\n }\n onCleanup(() => {\n if (observer) {\n heading.forEach((e) => observer.unobserve(e));\n observer.disconnect();\n }\n list.forEach((e) => {\n e.removeEventListener('click', handleAnchor);\n });\n });\n });\n\n return (\n <>\n <style textContent={baseStyle()} />\n <style textContent={mdStyle} />\n <Show when={props.css}>\n <style textContent={css(props.css)} />\n </Show>\n <Switch>\n <Match when={(props.children as [])?.length}>\n <article class=\"n-md-box\" part=\"box\">\n <div class=\"n-md-body\" part=\"body\">\n <For each={props.children as []}>{(e) => e}</For>\n </div>\n </article>\n </Match>\n <Match when={props.text}>\n <article ref={ref} class={cx('n-md-box', props.class)} part=\"box\" />\n </Match>\n </Switch>\n </>\n );\n}\n\nexport interface MdProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** md内容 */\n text?: string;\n /** 开启图片查看器\n * @since 2.0.8\n * @default true\n */\n pictureViewer?: boolean;\n /** 开启图片懒加载\n * @since 2.8.3\n * @default true\n */\n lazyPicture?: boolean;\n /** 显示代码块行号\n * @default true\n */\n lineNumber?: boolean;\n /** 开启代码块工具条\n * @default ['copy']\n */\n tools?: 'copy'[];\n /** 指定滚动的容器\n * @default () => window\n */\n getAnchorContainer?: () => HTMLElement;\n /** 不进行解析\n * @default false\n */\n notRender?: boolean;\n children?: JSX.Element;\n /**\n * 使用 web worker\n */\n webWorker?: boolean;\n}\n\nexport type MdElement = CustomElement<MdProps>;\n\ncustomElement<MdProps>(\n 'n-md',\n {\n class: void 0,\n pictureViewer: void 0,\n lazyPicture: void 0,\n lineNumber: true,\n text: void 0,\n tools: void 0,\n getAnchorContainer: void 0,\n css: void 0,\n children: void 0,\n notRender: void 0,\n webWorker: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n text: (!_.notRender && el.textContent) || el.text,\n css: el.css,\n tools: el.tools,\n getAnchorContainer: el.getAnchorContainer,\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n el.replaceChildren();\n });\n return <MD {...props} />;\n },\n);\nexport default MD;\n"],"names":["MD","_props","renderer","ref","baseStyle","theme","props","mergeProps","webWorker","pictureViewer","lazyPicture","text","tools","getAnchorContainer","window","initWorker","Worker","worker","update","e","innerHTML","data","postMessage","opt","langToolbar","options","marked","default","Renderer","katexBlock","code","katexInline","image","src","title","alt","toolbar","length","lang","langLineNumber","encodeURIComponent","headerPrefix","breaks","pedantic","smartLists","smartypants","xhtml","createEffect","addEventListener","JSON","stringify","lineNumber","frameCallback","onCleanup","removeEventListener","terminate","list","heading","active","handleAnchor","preventDefault","stopPropagation","a","target","hash","querySelector","decodeURIComponent","scrollIntoView","behavior","block","forEach","item","classList","remove","add","open","href","observerEntry","entries","entry","id","getAttribute","all","querySelectorAll","l","idx","indexOf","isIntersecting","push","splice","offsetParent","scrollTo","top","offsetTop","observer","startsWith","IntersectionObserver","rootMargin","threshold","observe","unobserve","disconnect","mdStyle","Show","css","Switch","Match","children","For","cx","class","customElement","notRender","_","el","element","textContent","removeAttribute","replaceChildren"],"rangeMappings":"","mappings":"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"}