neko-ui 2.9.1 → 2.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/code/index.d.ts +8 -11
- package/es/code/index.js +1 -2
- package/es/code/index.js.map +1 -1
- package/es/code/style.d.ts +2 -0
- package/es/code/style.js +191 -57
- package/es/code/style.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js.map +1 -1
- package/es/md/index.d.ts +0 -4
- package/es/md/index.js +1 -1
- package/es/md/index.js.map +1 -1
- package/es/md/worker.js +1 -1
- package/es/md/worker.js.map +1 -1
- package/es/prism/index.d.ts +3 -8
- package/es/prism/index.js +1 -1
- package/es/prism/index.js.map +1 -1
- package/es/qrcode/index.d.ts +16 -0
- package/es/qrcode/index.js.map +1 -1
- package/es/qrcode/qrcode.js.map +1 -1
- package/lib/code/index.d.ts +8 -11
- package/lib/code/index.js +1 -2
- package/lib/code/index.js.map +1 -1
- package/lib/code/style.d.ts +2 -0
- package/lib/code/style.js +192 -58
- package/lib/code/style.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js.map +1 -1
- package/lib/md/index.d.ts +0 -4
- package/lib/md/index.js +1 -1
- package/lib/md/index.js.map +1 -1
- package/lib/md/worker.js +1 -1
- package/lib/md/worker.js.map +1 -1
- package/lib/prism/index.d.ts +3 -8
- package/lib/prism/index.js +1 -1
- package/lib/prism/index.js.map +1 -1
- package/lib/qrcode/index.d.ts +16 -0
- package/lib/qrcode/index.js.map +1 -1
- package/lib/qrcode/qrcode.js.map +1 -1
- package/package.json +3 -3
- package/umd/index.js +1 -2
- package/es/prism/css.d.ts +0 -2
- package/es/prism/css.js +0 -487
- package/es/prism/css.js.map +0 -1
- package/lib/prism/css.d.ts +0 -2
- package/lib/prism/css.js +0 -487
- package/lib/prism/css.js.map +0 -1
- package/umd/js/b0b7ef40820a295f.js +0 -1
package/es/md/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/md/index.tsx"],"sourcesContent":["import { createEffect, For, Match, mergeProps, onCleanup, Show, Switch } from 'solid-js';\nimport { frameCallback } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\n\nimport type { CustomElement } from '..';\nimport { clearAttribute } from '../basic-config';\nimport mdStyle from '../md-style';\nimport theme, { block } from '../theme';\n\nimport '../code';\nimport '../img';\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@latest/es/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) => {\n item.classList.remove('active');\n });\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) => {\n observer.observe(e);\n });\n list.forEach((e) => {\n e.addEventListener('click', handleAnchor);\n });\n }\n onCleanup(() => {\n if (observer) {\n heading.forEach((e) => {\n observer.unobserve(e);\n });\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 || []).length > 0}>\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 clearAttribute(el, ['css', 'text']);\n el.replaceChildren();\n });\n return (\n <>\n <style textContent={block} />\n <MD {...props} />\n </>\n );\n },\n);\nexport default MD;\n"],"names":["createEffect","For","Match","mergeProps","onCleanup","Show","Switch","frameCallback","css","cx","customElement","clearAttribute","mdStyle","theme","block","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","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","replaceChildren"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../components/md/index.tsx"],"sourcesContent":["import { createEffect, For, Match, mergeProps, onCleanup, Show, Switch } from 'solid-js';\nimport { frameCallback } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\n\nimport type { CustomElement } from '..';\nimport { clearAttribute } from '../basic-config';\nimport mdStyle from '../md-style';\nimport theme, { block } from '../theme';\n\nimport '../code';\nimport '../img';\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@latest/es/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 }) {\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}\">${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 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 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) => {\n item.classList.remove('active');\n });\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) => {\n observer.observe(e);\n });\n list.forEach((e) => {\n e.addEventListener('click', handleAnchor);\n });\n }\n onCleanup(() => {\n if (observer) {\n heading.forEach((e) => {\n observer.unobserve(e);\n });\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 || []).length > 0}>\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 ['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 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 clearAttribute(el, ['css', 'text']);\n el.replaceChildren();\n });\n return (\n <>\n <style textContent={block} />\n <MD {...props} />\n </>\n );\n },\n);\nexport default MD;\n"],"names":["createEffect","For","Match","mergeProps","onCleanup","Show","Switch","frameCallback","css","cx","customElement","clearAttribute","mdStyle","theme","block","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","headerPrefix","breaks","pedantic","smartLists","smartypants","xhtml","addEventListener","JSON","stringify","removeEventListener","terminate","list","heading","active","handleAnchor","preventDefault","stopPropagation","a","target","hash","querySelector","decodeURIComponent","scrollIntoView","behavior","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","replaceChildren"],"mappings":"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"}
|
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("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:
|
|
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: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 d=!!(null==i?void 0:i.length);c.code=function(e,t){return"treeview"===t?`<n-tree data="${e}" />`:`<n-code class="n-code" toolbar="${d}" language="${t}">${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{};
|
|
2
2
|
//# sourceMappingURL=worker.js.map
|
package/es/md/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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
|
|
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 } & 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}\">${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","encodeURIComponent","headerPrefix","breaks","pedantic","smartLists","smartypants","xhtml","error","postMessage"],"mappings":"+MAEAA,KAAKC,aAAa,CAAC,+DAkDnBD,KAAKE,gBAAgB,CAAC,UAhDtB,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,gBAMpCE,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,EAAEC,mBAAmBT,GAAM,SAAS,CAAC,AAC9G,EAEAb,EAASJ,KAAKc,MAAM,CAACN,EAAM,GACzBK,SAAUA,EACVF,YAAaA,EACbgB,aAAc,KACdC,OAAQ,CAAA,EACRC,SAAU,CAAA,EACVC,WAAY,CAAA,EACZC,YAAa,CAAA,EACbC,MAAO,CAAA,GACJpB,GAEP,CAAE,MAAOqB,EAAO,CACd7B,EAAS6B,CACX,CACAjC,KAAKkC,WAAW,CAAC9B,EACnB,EAE4C,CAAA"}
|
package/es/prism/index.d.ts
CHANGED
|
@@ -2,26 +2,21 @@ import Prism from 'prismjs';
|
|
|
2
2
|
import 'prismjs/components/prism-bash.js';
|
|
3
3
|
import 'prismjs/components/prism-clike.js';
|
|
4
4
|
import 'prismjs/components/prism-css.js';
|
|
5
|
-
import 'prismjs/components/prism-diff.js';
|
|
6
5
|
import 'prismjs/components/prism-docker.js';
|
|
7
6
|
import 'prismjs/components/prism-git.js';
|
|
8
7
|
import 'prismjs/components/prism-javascript.js';
|
|
8
|
+
import 'prismjs/components/prism-json.js';
|
|
9
9
|
import 'prismjs/components/prism-jsx.js';
|
|
10
|
-
import 'prismjs/components/prism-
|
|
10
|
+
import 'prismjs/components/prism-tsx.js';
|
|
11
11
|
import 'prismjs/components/prism-less.js';
|
|
12
|
-
import 'prismjs/components/prism-markdown.js';
|
|
13
|
-
import 'prismjs/components/prism-markup-templating.js';
|
|
14
12
|
import 'prismjs/components/prism-markup.js';
|
|
15
13
|
import 'prismjs/components/prism-regex.js';
|
|
16
14
|
import 'prismjs/components/prism-rust.js';
|
|
17
15
|
import 'prismjs/components/prism-sql.js';
|
|
18
16
|
import 'prismjs/components/prism-swift.js';
|
|
19
17
|
import 'prismjs/components/prism-toml.js';
|
|
20
|
-
import 'prismjs/components/prism-tsx.js';
|
|
21
18
|
import 'prismjs/components/prism-typescript.js';
|
|
22
|
-
import 'prismjs/components/prism-wasm.js';
|
|
23
19
|
import 'prismjs/components/prism-yaml.js';
|
|
24
|
-
import 'prismjs/
|
|
20
|
+
import 'prismjs/components/prism-matlab.js';
|
|
25
21
|
import 'prismjs/plugins/highlight-keywords/prism-highlight-keywords.js';
|
|
26
|
-
import 'prismjs/plugins/line-numbers/prism-line-numbers.js';
|
|
27
22
|
export default Prism;
|
package/es/prism/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import s from"prismjs";import"prismjs/components/prism-bash.js";import"prismjs/components/prism-clike.js";import"prismjs/components/prism-css.js";import"prismjs/components/prism-
|
|
1
|
+
import s from"prismjs";import"prismjs/components/prism-bash.js";import"prismjs/components/prism-clike.js";import"prismjs/components/prism-css.js";import"prismjs/components/prism-docker.js";import"prismjs/components/prism-git.js";import"prismjs/components/prism-javascript.js";import"prismjs/components/prism-json.js";import"prismjs/components/prism-jsx.js";import"prismjs/components/prism-tsx.js";import"prismjs/components/prism-less.js";import"prismjs/components/prism-markup.js";import"prismjs/components/prism-regex.js";import"prismjs/components/prism-rust.js";import"prismjs/components/prism-sql.js";import"prismjs/components/prism-swift.js";import"prismjs/components/prism-toml.js";import"prismjs/components/prism-typescript.js";import"prismjs/components/prism-yaml.js";import"prismjs/components/prism-matlab.js";import"prismjs/plugins/highlight-keywords/prism-highlight-keywords.js";export default s;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/es/prism/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/prism/index.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../components/prism/index.ts"],"sourcesContent":["import Prism from 'prismjs';\n\n// language\nimport 'prismjs/components/prism-bash.js'; // shell + sh + bash\nimport 'prismjs/components/prism-clike.js';\nimport 'prismjs/components/prism-css.js';\nimport 'prismjs/components/prism-docker.js'; // docker + dockerfile\nimport 'prismjs/components/prism-git.js'; // diff\nimport 'prismjs/components/prism-javascript.js'; // javascript + js\nimport 'prismjs/components/prism-json.js'; // json + webmanifest\nimport 'prismjs/components/prism-jsx.js';\nimport 'prismjs/components/prism-tsx.js';\nimport 'prismjs/components/prism-less.js';\nimport 'prismjs/components/prism-markup.js'; // html + mathml + svg + xml + ssml + atom + rss\nimport 'prismjs/components/prism-regex.js';\nimport 'prismjs/components/prism-rust.js';\nimport 'prismjs/components/prism-sql.js';\nimport 'prismjs/components/prism-swift.js';\nimport 'prismjs/components/prism-toml.js';\nimport 'prismjs/components/prism-typescript.js'; // typescript + ts\nimport 'prismjs/components/prism-yaml.js'; // yaml + yml\nimport 'prismjs/components/prism-matlab.js';\n// plugins\nimport 'prismjs/plugins/highlight-keywords/prism-highlight-keywords.js';\n\nexport default Prism;\n"],"names":["Prism"],"mappings":"AAAA,OAAOA,MAAW,SAAU,AAG5B,OAAO,kCAAmC,AAC1C,OAAO,mCAAoC,AAC3C,OAAO,iCAAkC,AACzC,OAAO,oCAAqC,AAC5C,OAAO,iCAAkC,AACzC,OAAO,wCAAyC,AAChD,OAAO,kCAAmC,AAC1C,OAAO,iCAAkC,AACzC,OAAO,iCAAkC,AACzC,OAAO,kCAAmC,AAC1C,OAAO,oCAAqC,AAC5C,OAAO,mCAAoC,AAC3C,OAAO,kCAAmC,AAC1C,OAAO,iCAAkC,AACzC,OAAO,mCAAoC,AAC3C,OAAO,kCAAmC,AAC1C,OAAO,wCAAyC,AAChD,OAAO,kCAAmC,AAC1C,OAAO,oCAAqC,AAE5C,OAAO,gEAAiE,AAExE,gBAAeA,CAAM"}
|
package/es/qrcode/index.d.ts
CHANGED
|
@@ -20,9 +20,25 @@ export interface QrCodeProps {
|
|
|
20
20
|
* @default 'm'
|
|
21
21
|
*/
|
|
22
22
|
ecl?: 'l' | 'm' | 'q' | 'h';
|
|
23
|
+
/**
|
|
24
|
+
* 支持的QR码模型2标准最小版本
|
|
25
|
+
* @default 1
|
|
26
|
+
*/
|
|
23
27
|
minVersion?: IntRange<1, 41>;
|
|
28
|
+
/**
|
|
29
|
+
* 支持的QR码模型2标准最大版本
|
|
30
|
+
* @default 40
|
|
31
|
+
*/
|
|
24
32
|
maxVersion?: IntRange<1, 41>;
|
|
33
|
+
/**
|
|
34
|
+
* 掩码模式; 为 -1 时,表示自动选择
|
|
35
|
+
* @default -1
|
|
36
|
+
*/
|
|
25
37
|
mask?: -1 | IntRange<0, 8>;
|
|
38
|
+
/**
|
|
39
|
+
* 在数据仍然适合当前版本号的情况下提高纠错级别
|
|
40
|
+
* @default true
|
|
41
|
+
*/
|
|
26
42
|
boostEcc?: boolean;
|
|
27
43
|
/**
|
|
28
44
|
* 模块外围的边框宽度(模块单位,非像素)
|
package/es/qrcode/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/qrcode/index.tsx"],"sourcesContent":["import { createEffect, JSX, mergeProps, Show, splitProps } from 'solid-js';\nimport { customElement } from 'solid-element';\n\nimport { clearAttribute } from '../basic-config';\nimport theme, { inline } from '../theme';\n\nimport { Ecc, encodeSegments, type IntRange, makeSegments } from './qrcode';\nexport type { IntRange } from './qrcode';\nexport interface QrCodeProps {\n /** 自定义类名 */\n class?: string;\n style?: string | JSX.CSSProperties;\n /** 二维码值 */\n value: string;\n /** 二维码模块的颜色 */\n color?: string;\n /** 二维码背景色 */\n bgColor?: string;\n /**\n * 二维码尺寸\n * @default 150\n */\n size?: number;\n /** 纠错等级; 分别对应7%、15%、25%、30%的数据纠错能力\n * @default 'm'\n */\n ecl?: 'l' | 'm' | 'q' | 'h';\n minVersion?: IntRange<1, 41>;\n maxVersion?: IntRange<1, 41>;\n mask?: -1 | IntRange<0, 8>;\n boostEcc?: boolean;\n /**\n * 模块外围的边框宽度(模块单位,非像素)\n * @default 1\n */\n border?: IntRange<1, 101>;\n /**\n * 渲染方式\n * @default 'svg'\n */\n type?: 'svg' | 'canvas';\n /**\n * 二维码图标\n */\n icon?: string;\n /**\n * 二维码图标尺寸\n * @default 7\n */\n iconSize?: number;\n /**\n * 模块形状\n * @default 'rect'\n * @since 2.9.1\n */\n shape?: 'rect' | 'rhombus' | 'heart' | 'circle';\n}\nconst QRCode = (_props: QrCodeProps) => {\n const { isDark } = theme;\n let cvs: HTMLCanvasElement | undefined;\n let svg: SVGSVGElement | undefined;\n let img: HTMLImageElement | undefined;\n const normal = mergeProps(\n {\n size: 160,\n iconSize: 7,\n border: 1,\n ecl: 'm' as const,\n type: 'svg' as const,\n },\n _props,\n );\n const [props, other] = splitProps(normal, [\n 'value',\n 'border',\n 'size',\n 'type',\n 'minVersion',\n 'maxVersion',\n 'mask',\n 'boostEcc',\n 'ecl',\n 'bgColor',\n 'color',\n 'iconSize',\n 'shape',\n ]);\n const eccMap = {\n l: Ecc.get('LOW'),\n m: Ecc.get('MEDIUM'),\n q: Ecc.get('QUARTILE'),\n h: Ecc.get('HIGH'),\n };\n\n createEffect((prev?: { color?: string; bg?: string }) => {\n isDark(); // 响应主题模式\n const segs = makeSegments(props.value);\n const qr = encodeSegments(\n segs,\n eccMap[props.ecl],\n props.minVersion,\n props.maxVersion,\n props.mask,\n props.boostEcc,\n );\n let styles: CSSStyleDeclaration;\n\n if (props.type === 'canvas') {\n if (props.size <= 0 || props.border < 0 || !cvs) throw new RangeError('Value out of range');\n const scale = props.size / (qr.size + props.border * 2);\n const radius = scale / 2; // 半径\n\n cvs.width = props.size;\n cvs.height = props.size;\n styles = window.getComputedStyle(cvs as unknown as Element);\n const ctx = cvs.getContext('2d') as CanvasRenderingContext2D;\n const color = props.color || prev?.color || styles.color;\n const bgColor = props.bgColor || prev?.bg || styles.backgroundColor;\n\n ctx.clearRect(0, 0, props.size, props.size);\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, props.size, props.size);\n ctx.fillStyle = color;\n for (let y = -props.border; y < qr.size + props.border; y++) {\n const ypos = (y + props.border) * scale;\n\n for (let x = -props.border; x < qr.size + props.border; x++) {\n if (qr.getModule(x, y)) {\n const xpos = (x + props.border) * scale;\n\n switch (props.shape) {\n case 'circle':\n ctx.beginPath();\n ctx.arc(xpos + radius, ypos + radius, radius, 0, Math.PI * 2);\n ctx.fill();\n break;\n case 'heart':\n ctx.beginPath();\n ctx.moveTo(xpos + radius, ypos + scale / 4);\n ctx.bezierCurveTo(\n xpos + scale * 0.1,\n ypos - scale * 0.2,\n xpos - scale * 0.3,\n ypos + scale * 0.6,\n xpos + radius,\n ypos + scale,\n );\n ctx.bezierCurveTo(\n xpos + scale * 1.3,\n ypos + scale * 0.6,\n xpos + scale * 0.9,\n ypos - scale * 0.2,\n xpos + radius,\n ypos + scale / 4,\n );\n ctx.closePath();\n ctx.fill();\n break;\n case 'rhombus':\n ctx.beginPath();\n ctx.moveTo(xpos + radius, ypos);\n ctx.lineTo(xpos + scale, ypos + radius);\n ctx.lineTo(xpos + radius, ypos + scale);\n ctx.lineTo(xpos, ypos + radius);\n ctx.closePath();\n ctx.fill();\n break;\n case 'rect':\n default:\n // 避免由于小数位带来的间隔问题\n ctx.fillRect(\n Math.floor(xpos),\n Math.floor(ypos),\n Math.ceil(scale),\n Math.ceil(scale),\n );\n break;\n }\n }\n }\n }\n // 恢复缩放\n // ctx.restore();\n // 如果有图标,则绘制到中心\n if (other.icon) {\n if (!img) {\n img = new Image(props.iconSize, props.iconSize);\n }\n img.src = other.icon;\n img.onload = () => {\n const offset = (props.size + props.border * scale - props.iconSize) / 2;\n\n ctx.drawImage(img!, offset, offset, props.iconSize, props.iconSize);\n };\n }\n } else {\n if (props.border < 0) {\n throw new RangeError('Border must be non-negative');\n }\n const parts: string[] = [];\n\n for (let y = 0; y < qr.size; y++) {\n for (let x = 0; x < qr.size; x++) {\n if (qr.getModule(x, y)) {\n switch (props.shape) {\n case 'circle':\n parts.push(\n `M${x + props.border + 0.5},${y + props.border + 0.5} m -0.5, 0 a 0.5,0.5 0 1,0 1,0 a 0.5,0.5 0 1,0 -1,0`,\n );\n break;\n case 'rhombus':\n parts.push(\n `M${x + props.border + 0.5},${y + props.border} L${x + props.border + 1},${y + props.border + 0.5} L${x + props.border + 0.5},${y + props.border + 1} L${x + props.border},${y + props.border + 0.5} Z`,\n );\n break;\n case 'heart':\n parts.push(\n `M${x + props.border + 0.5},${y + props.border + 0.25} C${x + props.border + 0.1},${y + props.border - 0.2} ${x + props.border - 0.3},${y + props.border + 0.6} ${x + props.border + 0.5},${y + props.border + 1} C${x + props.border + 1.3},${y + props.border + 0.6} ${x + props.border + 0.9},${y + props.border - 0.2} ${x + props.border + 0.5},${y + props.border + 0.25} Z`,\n );\n break;\n case 'rect':\n default:\n parts.push(`M${x + props.border},${y + props.border}h1v1h-1z`);\n break;\n }\n }\n }\n }\n const paths = svg?.querySelectorAll('path') as unknown as SVGPathElement[];\n const box_size = qr.size + props.border * 2;\n\n svg?.setAttribute('viewBox', `0 0 ${box_size} ${box_size}`);\n styles = window.getComputedStyle(svg as unknown as Element);\n if (paths.length > 0) {\n paths[0].setAttribute('d', `M0,0 h${box_size}v${box_size}H0z`);\n paths[0].setAttribute('fill', props.bgColor || prev?.bg || styles.backgroundColor);\n paths[1].setAttribute('d', parts.join(' '));\n paths[1].setAttribute('fill', props.color || prev?.color || styles.color);\n }\n // icon\n const icon = svg?.querySelector('image');\n\n if (icon) {\n const offset = `${(qr.size + props.border * 2 - props.iconSize) / 2}`;\n\n icon.setAttribute('x', offset);\n icon.setAttribute('y', offset);\n icon.setAttribute('width', `${props.iconSize}`);\n icon.setAttribute('height', `${props.iconSize}`);\n }\n }\n\n return {\n color: styles.color,\n bg: styles.backgroundColor,\n };\n });\n\n return (\n <Show when={props.type === 'svg'} fallback={<canvas ref={cvs} role=\"img\" />}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n version=\"1.1\"\n stroke=\"none\"\n width={props.size}\n height={props.size}\n ref={svg}\n shape-rendering=\"crispEdges\"\n role=\"img\"\n >\n <path />\n <path />\n <Show when={other.icon}>\n <image href={other.icon} preserveAspectRatio=\"xMidYMid meet\" />\n </Show>\n </svg>\n </Show>\n );\n};\n\nexport type QrCodeElement = CustomElement<QrCodeProps>;\nexport const defaultProps: QrCodeProps = {\n value: '',\n icon: void 0,\n color: void 0,\n bgColor: void 0,\n size: void 0,\n iconSize: void 0,\n ecl: void 0,\n minVersion: void 0,\n maxVersion: void 0,\n mask: void 0,\n boostEcc: false,\n border: void 0,\n type: void 0,\n shape: void 0,\n};\n\ncustomElement<QrCodeProps>('n-qrcode', defaultProps, (props, opt) => {\n const el = opt.element;\n\n createEffect(() => {\n clearAttribute(el, ['value', 'icon']);\n });\n return (\n <>\n <style textContent={inline} />\n <QRCode {...props} />\n </>\n );\n});\n\nexport default QRCode;\n"],"names":["createEffect","mergeProps","Show","splitProps","customElement","clearAttribute","theme","inline","Ecc","encodeSegments","makeSegments","QRCode","_props","cvs","svg","img","isDark","props","other","size","iconSize","border","ecl","type","eccMap","l","get","m","q","h","prev","styles","qr","value","minVersion","maxVersion","mask","boostEcc","RangeError","scale","radius","width","height","window","getComputedStyle","ctx","getContext","color","bgColor","bg","backgroundColor","clearRect","fillStyle","fillRect","y","ypos","x","getModule","xpos","shape","beginPath","arc","Math","PI","fill","moveTo","bezierCurveTo","closePath","lineTo","floor","ceil","icon","Image","src","onload","offset","drawImage","parts","push","paths","querySelectorAll","box_size","setAttribute","length","join","querySelector","defaultProps","opt","el","element"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../components/qrcode/index.tsx"],"sourcesContent":["import { createEffect, JSX, mergeProps, Show, splitProps } from 'solid-js';\nimport { customElement } from 'solid-element';\n\nimport { clearAttribute } from '../basic-config';\nimport theme, { inline } from '../theme';\n\nimport { Ecc, encodeSegments, type IntRange, makeSegments } from './qrcode';\nexport type { IntRange } from './qrcode';\nexport interface QrCodeProps {\n /** 自定义类名 */\n class?: string;\n style?: string | JSX.CSSProperties;\n /** 二维码值 */\n value: string;\n /** 二维码模块的颜色 */\n color?: string;\n /** 二维码背景色 */\n bgColor?: string;\n /**\n * 二维码尺寸\n * @default 150\n */\n size?: number;\n /** 纠错等级; 分别对应7%、15%、25%、30%的数据纠错能力\n * @default 'm'\n */\n ecl?: 'l' | 'm' | 'q' | 'h';\n /**\n * 支持的QR码模型2标准最小版本\n * @default 1\n */\n minVersion?: IntRange<1, 41>;\n /**\n * 支持的QR码模型2标准最大版本\n * @default 40\n */\n maxVersion?: IntRange<1, 41>;\n /**\n * 掩码模式; 为 -1 时,表示自动选择\n * @default -1\n */\n mask?: -1 | IntRange<0, 8>;\n /**\n * 在数据仍然适合当前版本号的情况下提高纠错级别\n * @default true\n */\n boostEcc?: boolean;\n /**\n * 模块外围的边框宽度(模块单位,非像素)\n * @default 1\n */\n border?: IntRange<1, 101>;\n /**\n * 渲染方式\n * @default 'svg'\n */\n type?: 'svg' | 'canvas';\n /**\n * 二维码图标\n */\n icon?: string;\n /**\n * 二维码图标尺寸\n * @default 7\n */\n iconSize?: number;\n /**\n * 模块形状\n * @default 'rect'\n * @since 2.9.1\n */\n shape?: 'rect' | 'rhombus' | 'heart' | 'circle';\n}\nconst QRCode = (_props: QrCodeProps) => {\n const { isDark } = theme;\n let cvs: HTMLCanvasElement | undefined;\n let svg: SVGSVGElement | undefined;\n let img: HTMLImageElement | undefined;\n const normal = mergeProps(\n {\n size: 160,\n iconSize: 7,\n border: 1,\n ecl: 'm' as const,\n type: 'svg' as const,\n },\n _props,\n );\n const [props, other] = splitProps(normal, [\n 'value',\n 'border',\n 'size',\n 'type',\n 'minVersion',\n 'maxVersion',\n 'mask',\n 'boostEcc',\n 'ecl',\n 'bgColor',\n 'color',\n 'iconSize',\n 'shape',\n ]);\n const eccMap = {\n l: Ecc.get('LOW'),\n m: Ecc.get('MEDIUM'),\n q: Ecc.get('QUARTILE'),\n h: Ecc.get('HIGH'),\n };\n\n createEffect((prev?: { color?: string; bg?: string }) => {\n isDark(); // 响应主题模式\n const segs = makeSegments(props.value);\n const qr = encodeSegments(\n segs,\n eccMap[props.ecl],\n props.minVersion,\n props.maxVersion,\n props.mask,\n props.boostEcc,\n );\n let styles: CSSStyleDeclaration;\n\n if (props.type === 'canvas') {\n if (props.size <= 0 || props.border < 0 || !cvs) throw new RangeError('Value out of range');\n const scale = props.size / (qr.size + props.border * 2);\n const radius = scale / 2; // 半径\n\n cvs.width = props.size;\n cvs.height = props.size;\n styles = window.getComputedStyle(cvs as unknown as Element);\n const ctx = cvs.getContext('2d') as CanvasRenderingContext2D;\n const color = props.color || prev?.color || styles.color;\n const bgColor = props.bgColor || prev?.bg || styles.backgroundColor;\n\n ctx.clearRect(0, 0, props.size, props.size);\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, props.size, props.size);\n ctx.fillStyle = color;\n for (let y = -props.border; y < qr.size + props.border; y++) {\n const ypos = (y + props.border) * scale;\n\n for (let x = -props.border; x < qr.size + props.border; x++) {\n if (qr.getModule(x, y)) {\n const xpos = (x + props.border) * scale;\n\n switch (props.shape) {\n case 'circle':\n ctx.beginPath();\n ctx.arc(xpos + radius, ypos + radius, radius, 0, Math.PI * 2);\n ctx.fill();\n break;\n case 'heart':\n ctx.beginPath();\n ctx.moveTo(xpos + radius, ypos + scale / 4);\n ctx.bezierCurveTo(\n xpos + scale * 0.1,\n ypos - scale * 0.2,\n xpos - scale * 0.3,\n ypos + scale * 0.6,\n xpos + radius,\n ypos + scale,\n );\n ctx.bezierCurveTo(\n xpos + scale * 1.3,\n ypos + scale * 0.6,\n xpos + scale * 0.9,\n ypos - scale * 0.2,\n xpos + radius,\n ypos + scale / 4,\n );\n ctx.closePath();\n ctx.fill();\n break;\n case 'rhombus':\n ctx.beginPath();\n ctx.moveTo(xpos + radius, ypos);\n ctx.lineTo(xpos + scale, ypos + radius);\n ctx.lineTo(xpos + radius, ypos + scale);\n ctx.lineTo(xpos, ypos + radius);\n ctx.closePath();\n ctx.fill();\n break;\n case 'rect':\n default:\n // 避免由于小数位带来的间隔问题\n ctx.fillRect(\n Math.floor(xpos),\n Math.floor(ypos),\n Math.ceil(scale),\n Math.ceil(scale),\n );\n break;\n }\n }\n }\n }\n // 恢复缩放\n // ctx.restore();\n // 如果有图标,则绘制到中心\n if (other.icon) {\n if (!img) {\n img = new Image(props.iconSize, props.iconSize);\n }\n img.src = other.icon;\n img.onload = () => {\n const offset = (props.size + props.border * scale - props.iconSize) / 2;\n\n ctx.drawImage(img!, offset, offset, props.iconSize, props.iconSize);\n };\n }\n } else {\n if (props.border < 0) {\n throw new RangeError('Border must be non-negative');\n }\n const parts: string[] = [];\n\n for (let y = 0; y < qr.size; y++) {\n for (let x = 0; x < qr.size; x++) {\n if (qr.getModule(x, y)) {\n switch (props.shape) {\n case 'circle':\n parts.push(\n `M${x + props.border + 0.5},${y + props.border + 0.5} m -0.5, 0 a 0.5,0.5 0 1,0 1,0 a 0.5,0.5 0 1,0 -1,0`,\n );\n break;\n case 'rhombus':\n parts.push(\n `M${x + props.border + 0.5},${y + props.border} L${x + props.border + 1},${y + props.border + 0.5} L${x + props.border + 0.5},${y + props.border + 1} L${x + props.border},${y + props.border + 0.5} Z`,\n );\n break;\n case 'heart':\n parts.push(\n `M${x + props.border + 0.5},${y + props.border + 0.25} C${x + props.border + 0.1},${y + props.border - 0.2} ${x + props.border - 0.3},${y + props.border + 0.6} ${x + props.border + 0.5},${y + props.border + 1} C${x + props.border + 1.3},${y + props.border + 0.6} ${x + props.border + 0.9},${y + props.border - 0.2} ${x + props.border + 0.5},${y + props.border + 0.25} Z`,\n );\n break;\n case 'rect':\n default:\n parts.push(`M${x + props.border},${y + props.border}h1v1h-1z`);\n break;\n }\n }\n }\n }\n const paths = svg?.querySelectorAll('path') as unknown as SVGPathElement[];\n const box_size = qr.size + props.border * 2;\n\n svg?.setAttribute('viewBox', `0 0 ${box_size} ${box_size}`);\n styles = window.getComputedStyle(svg as unknown as Element);\n if (paths.length > 0) {\n paths[0].setAttribute('d', `M0,0 h${box_size}v${box_size}H0z`);\n paths[0].setAttribute('fill', props.bgColor || prev?.bg || styles.backgroundColor);\n paths[1].setAttribute('d', parts.join(' '));\n paths[1].setAttribute('fill', props.color || prev?.color || styles.color);\n }\n // icon\n const icon = svg?.querySelector('image');\n\n if (icon) {\n const offset = `${(qr.size + props.border * 2 - props.iconSize) / 2}`;\n\n icon.setAttribute('x', offset);\n icon.setAttribute('y', offset);\n icon.setAttribute('width', `${props.iconSize}`);\n icon.setAttribute('height', `${props.iconSize}`);\n }\n }\n\n return {\n color: styles.color,\n bg: styles.backgroundColor,\n };\n });\n\n return (\n <Show when={props.type === 'svg'} fallback={<canvas ref={cvs} role=\"img\" />}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n version=\"1.1\"\n stroke=\"none\"\n width={props.size}\n height={props.size}\n ref={svg}\n shape-rendering=\"crispEdges\"\n role=\"img\"\n >\n <path />\n <path />\n <Show when={other.icon}>\n <image href={other.icon} preserveAspectRatio=\"xMidYMid meet\" />\n </Show>\n </svg>\n </Show>\n );\n};\n\nexport type QrCodeElement = CustomElement<QrCodeProps>;\nexport const defaultProps: QrCodeProps = {\n value: '',\n icon: void 0,\n color: void 0,\n bgColor: void 0,\n size: void 0,\n iconSize: void 0,\n ecl: void 0,\n minVersion: void 0,\n maxVersion: void 0,\n mask: void 0,\n boostEcc: false,\n border: void 0,\n type: void 0,\n shape: void 0,\n};\n\ncustomElement<QrCodeProps>('n-qrcode', defaultProps, (props, opt) => {\n const el = opt.element;\n\n createEffect(() => {\n clearAttribute(el, ['value', 'icon']);\n });\n return (\n <>\n <style textContent={inline} />\n <QRCode {...props} />\n </>\n );\n});\n\nexport default QRCode;\n"],"names":["createEffect","mergeProps","Show","splitProps","customElement","clearAttribute","theme","inline","Ecc","encodeSegments","makeSegments","QRCode","_props","cvs","svg","img","isDark","props","other","size","iconSize","border","ecl","type","eccMap","l","get","m","q","h","prev","styles","qr","value","minVersion","maxVersion","mask","boostEcc","RangeError","scale","radius","width","height","window","getComputedStyle","ctx","getContext","color","bgColor","bg","backgroundColor","clearRect","fillStyle","fillRect","y","ypos","x","getModule","xpos","shape","beginPath","arc","Math","PI","fill","moveTo","bezierCurveTo","closePath","lineTo","floor","ceil","icon","Image","src","onload","offset","drawImage","parts","push","paths","querySelectorAll","box_size","setAttribute","length","join","querySelector","defaultProps","opt","el","element"],"mappings":"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"}
|
package/es/qrcode/qrcode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/qrcode/qrcode.ts"],"sourcesContent":["/*\n * QR Code generator library\n *\n * Copyright (c) Project Nayuki. (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n */\n\n// 注意索引0用于填充,并设置为一个非法值\nconst ECC_CODEWORDS_PER_BLOCK = [\n [\n -1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30,\n 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n ], // Low\n [\n -1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28,\n 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n ], // Medium\n [\n -1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30,\n 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n ], // Quartile\n [\n -1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30,\n 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n ], // High\n];\nconst NUM_ERROR_CORRECTION_BLOCKS = [\n [\n -1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14,\n 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25,\n ],\n [\n -1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23,\n 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49,\n ],\n [\n -1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34,\n 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68,\n ],\n [\n -1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35,\n 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81,\n ],\n];\n// 返回在给定版本的QR码中可以存储的数据位数,已排除所有功能模块。这包括余数位,因此可能不是8的倍数。结果范围在[208, 29648]之间。这可以实现为一个40项的查找表。\n\nfunction getNumRawDataModules(ver: number): number {\n if (ver < QrCode.VERSION.MIN || ver > QrCode.VERSION.MAX) {\n throw new RangeError('Version number out of range');\n }\n let result = (16 * ver + 128) * ver + 64;\n\n if (ver >= 2) {\n const numAlign = Math.floor(ver / 7) + 2;\n\n result -= (25 * numAlign - 10) * numAlign - 55;\n if (ver >= 7) result -= 36;\n }\n assert(208 <= result && result <= 29648);\n return result;\n}\n// 返回指定版本号和纠错级别的 QR 码包含的 8 位数据码字数量(即非纠错码字),余位被舍弃。这个无状态的纯函数可以实现为一个 (40*4) 大小的查找表。\nfunction getNumDataCodewords(ver: number, ecl: Ecc): number {\n return (\n Math.floor(getNumRawDataModules(ver) / 8) -\n ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver] * NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver]\n );\n}\n/**\n * 生成一个 QR 码\n * @description\n * 根据给定的数据段和编码参数生成 QR 码。输出时会自动选择给定范围内尽可能小的 QR 码版本\n * @param {Readonly<QrSegment[]>} segs - 要编码的 QR 数据段\n * @param {Ecc} ecl - 纠错级别\n * @param {IntRange<1, 41>} [minVersion=1] - 最小版本(默认为 1)\n * @param {IntRange<1, 41>} [maxVersion=40] - 最大版本(默认为 40)\n * @param {-1 | IntRange<0, 8>} [mask=-1] - 掩码模式(默认为 -1,表示自动选择)\n * @param {boolean} [boostEcl=true] - 在数据仍然适合当前版本号的情况下提高纠错级别(默认为 true)。\n * @returns {QrCode} 返回生成的 QR 码。\n */\nexport function encodeSegments(\n segs: Readonly<QrSegment[]>,\n ecl: Ecc,\n minVersion: IntRange<1, 41> = 1,\n maxVersion: IntRange<1, 41> = 40,\n mask: -1 | IntRange<0, 8> = -1,\n boostEcl: boolean = true,\n): QrCode {\n if (\n !(\n QrCode.VERSION.MIN <= minVersion &&\n minVersion <= maxVersion &&\n maxVersion <= QrCode.VERSION.MAX\n ) ||\n mask < -1 ||\n mask > 7\n ) {\n throw new RangeError('Invalid value');\n }\n // 查找要使用的最小版本号\n let version: IntRange<1, 41>,\n dataUsedBits: number,\n _ecl = ecl;\n\n for (version = minVersion; ; version++) {\n const dataCapacityBits = getNumDataCodewords(version, _ecl) * 8, // 可用的数据位数\n usedBits = getTotalBits(segs, version);\n\n // 找到合适的版本号\n if (usedBits <= dataCapacityBits) {\n dataUsedBits = usedBits;\n break;\n }\n if (version >= maxVersion) {\n // 范围内的所有版本都无法容纳给定数据\n throw new RangeError('Data too long');\n }\n }\n // 提高纠错级别; 从低到高\n if (boostEcl) {\n for (const newEcl of [Ecc.get('MEDIUM'), Ecc.get('QUARTILE'), Ecc.get('HIGH')]) {\n if (dataUsedBits <= getNumDataCodewords(version, newEcl) * 8) _ecl = newEcl;\n }\n }\n // 连接所有段以创建数据位字符串\n const bb: number[] = [];\n\n for (const seg of segs) {\n appendBits(seg.mode.modeBits, 4, bb);\n appendBits(seg.numChars, seg.mode.numCharCountBits(version), bb);\n for (const b of seg.getData()) bb.push(b);\n }\n assert(bb.length === dataUsedBits);\n // 添加终止符并填充至字节边界(如果适用)\n const dataCapacityBits: number = getNumDataCodewords(version, _ecl) * 8;\n\n assert(bb.length <= dataCapacityBits);\n appendBits(0, Math.min(4, dataCapacityBits - bb.length), bb);\n appendBits(0, (8 - (bb.length % 8)) % 8, bb);\n assert(bb.length % 8 === 0);\n // 用交替字节填充直到达到数据容量\n for (let padByte = 0xec; bb.length < dataCapacityBits; padByte ^= 0xec ^ 0x11) {\n appendBits(padByte, 8, bb);\n }\n // 以大端序将位打包成字节\n const dataCodewords: number[] = [];\n\n while (dataCodewords.length * 8 < bb.length) dataCodewords.push(0);\n bb.forEach((b, i) => (dataCodewords[i >>> 3] |= b << (7 - (i & 7))));\n return new QrCode(version, _ecl, dataCodewords, mask);\n}\n\n// 返回表示给定字符串的UTF-8编码字节数组\nfunction toUtf8ByteArray(str: string): number[] {\n // eslint-disable-next-line no-param-reassign\n str = encodeURI(str);\n const result: number[] = [];\n\n for (let i = 0; i < str.length; i++) {\n if (str.charAt(i) !== '%') result.push(str.charCodeAt(i));\n else {\n result.push(parseInt(str.substring(i + 1, i + 3), 16));\n i += 2;\n }\n }\n return result;\n}\n\n// 返回一个新的可变段列表,用于表示给定的Unicode文本字符串。结果可能使用各种段模式并切换模式以优化位流的长度。\nexport function makeSegments(text: string): QrSegment[] {\n // 自动选择最高效的段编码\n if (text === '') return [];\n else if (isNumeric(text)) return [makeNumeric(text)];\n else if (isAlphanumeric(text)) return [makeAlphanumeric(text)];\n return [makeBytes(toUtf8ByteArray(text))];\n}\n\nfunction reedSolomonComputeDivisor(degree: number): number[] {\n if (degree < 1 || degree > 255) throw new RangeError('Degree out of range');\n // 多项式系数按从高到低的幂次存储,不包括始终为1的首项。\n // 例如多项式 x^3 + 255x^2 + 8x + 93 存储为uint8数组 [255, 8, 93]。\n const result: number[] = [];\n\n for (let i = 0; i < degree - 1; i++) result.push(0);\n result.push(1); // Start off with the monomial x^0\n\n // 计算多项式乘积 (x - r^0) * (x - r^1) * (x - r^2) * ... * (x - r^{degree-1}),\n // 并舍弃最高次项(该项始终为 1x^degree)。\n // 注意 r = 0x02,它是有限域 GF(2^8/0x11D) 的生成元。\n let root = 1;\n\n for (let i = 0; i < degree; i++) {\n // 将当前结果乘以 (x - r^i)\n for (let j = 0; j < result.length; j++) {\n result[j] = reedSolomonMultiply(result[j], root);\n if (j + 1 < result.length) result[j] ^= result[j + 1];\n }\n root = reedSolomonMultiply(root, 0x02);\n }\n return result;\n}\n\n// 返回给定数据和除数多项式的里德-所罗门错误纠正码字。\nfunction reedSolomonComputeRemainder(\n data: Readonly<number[]>,\n divisor: Readonly<number[]>,\n): number[] {\n const result = divisor.map(() => 0);\n\n for (const b of data) {\n // 多项式除法\n const factor = b ^ (result.shift() as number);\n\n result.push(0);\n divisor.forEach((coef, i) => (result[i] ^= reedSolomonMultiply(coef, factor)));\n }\n return result;\n}\n\n// 返回两个给定域元素模GF(2^8/0x11D)的乘积。参数和结果\n// 都是无符号8位整数。这可以实现为256*256个uint8条目的查找表。\nfunction reedSolomonMultiply(x: number, y: number): number {\n if (x >>> 8 !== 0 || y >>> 8 !== 0) throw new RangeError('Byte out of range');\n // 俄罗斯农民乘法\n let z: number = 0;\n\n for (let i = 7; i >= 0; i--) {\n z = (z << 1) ^ ((z >>> 7) * 0x11d);\n z ^= ((y >>> i) & 1) * x;\n }\n assert(z >>> 8 === 0);\n return z;\n}\n\n/*\n * 由 Denso Wave 发明,并在 ISO/IEC 18004 标准中描述。\n * 此类的实例表示一个不可变的暗/亮单元方格网。\n * 该类遵循 QR 码模型 2 规范,支持所有版本(尺寸)从 1 到 40、4 种纠错等级以及 4 种字符编码模式。\n */\nclass QrCode {\n // QR Code 的模块(false 表示浅色,true 表示深色)。构造函数完成后不可更改。通过 getModule() 访问。\n private readonly modules: boolean[][] = [];\n // 表示不受掩模影响的功能模块。构造函数完成后即被丢弃。\n private readonly isFunction: boolean[][] = [];\n /**\n * 获取 QR Code 的宽度和高度,以模块为单位。\n * 宽度和高度范围为 21 至 177(包括边界)。宽度和高度的计算公式为:`version * 4 + 17`。\n */\n public readonly size: number;\n /**\n * 获取 QR Code 所使用的掩膜模式的索引值。掩膜模式索引值范围为 0 到 7(包括边界)。即使 QR Code 是通过自动掩膜(mask = -1)生成的,最终的掩膜值仍然是 0 到 7 之间的有效值。\n */\n public readonly mask: IntRange<0, 8>;\n // 支持的版本, QR码模型2标准\n public static readonly VERSION = {\n MIN: 1,\n MAX: 40,\n } as const;\n // 惩罚分数常量, 用于 getPenaltyScore(),在评估哪个掩码最佳时使用。\n private static readonly PENALTY = {\n N1: 3, // 相同颜色的连续模块\n N2: 3, // 2x2 块\n N3: 40, // 查找器类似模式\n N4: 10, // 暗模块比例\n } as const;\n // 选择最佳掩码\n private selectMask(msk: -1 | IntRange<0, 8>): IntRange<0, 8> {\n if (msk !== -1) return msk;\n let mask: IntRange<0, 8> = 0;\n let minPenalty = 1000000000;\n\n for (let i = 0; i < 8; i++) {\n // 自动选择最佳掩模\n this.applyMask(i);\n this.drawFormatBits(i);\n const penalty = this.getPenaltyScore();\n\n if (penalty < minPenalty) {\n mask = i as IntRange<0, 8>;\n minPenalty = penalty;\n }\n // 撤销掩码\n this.applyMask(i);\n }\n assert(0 <= mask && mask <= 7);\n return mask;\n }\n // 使用给定的版本号、错误纠正级别、数据码字节和掩膜编号创建一个新的QR码。\n public constructor(\n // 此 QR Code 的版本号,范围为 1 到 40(含);该值决定了二维码的尺寸。\n public readonly version: IntRange<1, 41>,\n // 错误纠正级别。\n public readonly errorCorrectionLevel: Ecc,\n dataCodewords: Readonly<number[]>,\n msk: -1 | IntRange<0, 8>,\n ) {\n // 验证构造函数参数\n if (version < QrCode.VERSION.MIN || version > QrCode.VERSION.MAX) {\n throw new RangeError('Version value out of range');\n }\n if (msk < -1 || msk > 7) throw new RangeError('Mask value out of range');\n // 初始化\n this.size = version * 4 + 17;\n // 创建模块数组\n // 初始化两个网格为 size*size 大小的布尔数组,初始值为 false 全为浅色\n const row = Array(this.size).fill(false);\n\n for (let i = 0; i < this.size; i++) {\n this.modules[i] = row.slice();\n this.isFunction[i] = row.slice();\n }\n // 计算错误纠正码(ECC),绘制模块\n this.drawFunctionPatterns();\n // 构建 QR 码的主要流程\n const allCodewords = this.addEccAndInterleave(dataCodewords);\n\n this.drawCodewords(allCodewords);\n // 确定最终掩码\n this.mask = this.selectMask(msk);\n // 应用最终掩码并绘制格式位\n this.applyMask(this.mask);\n this.drawFormatBits(this.mask);\n // 构造完成, 丢弃\n this.isFunction = [];\n }\n\n /* -- 访问器方法 --*/\n // 返回给定坐标处模块(像素xy的颜色,浅色时为false,深色时为true);如果给定的坐标超出边界,则返回false(浅色)。\n public getModule(x: number, y: number): boolean {\n return x >= 0 && x < this.size && y >= 0 && y < this.size && this.modules[y][x];\n }\n /* -- 构造函数的私有辅助方法:绘制功能模块 --*/\n\n // 读取该对象的版本字段,并绘制和标记所有功能模块。\n private drawFunctionPatterns(): void {\n // 绘制水平和垂直定时图案\n for (let i = 0; i < this.size; i++) {\n const flag = i % 2 === 0;\n\n this.setFunctionModule(6, i, flag);\n this.setFunctionModule(i, 6, flag);\n }\n // 绘制 3 个定位图案(除了右下角的所有角落;会覆盖一些定时模块)\n this.drawFinderPattern(3, 3);\n const y = this.size - 4;\n\n this.drawFinderPattern(y, 3);\n this.drawFinderPattern(3, y);\n // 绘制多个对齐图案\n const alignPatPos = this.getAlignmentPatternPositions();\n const numAlign = alignPatPos.length;\n\n for (let i = 0; i < numAlign; i++) {\n for (let j = 0; j < numAlign; j++) {\n // 不在三个定位图案的角落处绘制\n if (\n !(\n (i === 0 && j === 0) ||\n (i === 0 && j === numAlign - 1) ||\n (i === numAlign - 1 && j === 0)\n )\n ) {\n this.drawAlignmentPattern(alignPatPos[i], alignPatPos[j]);\n }\n }\n }\n // 绘制配置数据\n this.drawFormatBits(0); // 临时掩码值;稍后在构造函数中会被覆盖\n this.drawVersion();\n }\n\n // 绘制格式位的两个副本(带有其自己的错误纠正码)\n // 基于给定的掩码和该对象的错误纠正级别字段。\n private drawFormatBits(mask: number): void {\n // 计算错误纠正码并打包位\n const data: number = (this.errorCorrectionLevel.formatBits << 3) | mask; // errCorrLvl 是 uint2 类型,mask 是 uint3 类型\n let rem: number = data;\n\n for (let i = 0; i < 10; i++) rem = (rem << 1) ^ ((rem >>> 9) * 0x537);\n const bits = ((data << 10) | rem) ^ 0x5412; // uint15\n\n assert(bits >>> 15 === 0);\n // 绘制第一个副本\n for (let i = 0; i <= 5; i++) this.setFunctionModule(8, i, getBit(bits, i));\n this.setFunctionModule(8, 7, getBit(bits, 6));\n this.setFunctionModule(8, 8, getBit(bits, 7));\n this.setFunctionModule(7, 8, getBit(bits, 8));\n for (let i = 9; i < 15; i++) {\n this.setFunctionModule(14 - i, 8, getBit(bits, i));\n }\n // 绘制第二个副本\n for (let i = 0; i < 8; i++) {\n this.setFunctionModule(this.size - 1 - i, 8, getBit(bits, i));\n }\n for (let i = 8; i < 15; i++) {\n this.setFunctionModule(8, this.size - 15 + i, getBit(bits, i));\n }\n this.setFunctionModule(8, this.size - 8, true); // Always dark\n }\n\n // 如果7 <= version <= 40,则绘制版本位的两个副本(带有其自己的错误纠正码),\n // 基于该对象的版本字段。\n private drawVersion(): void {\n if (this.version < 7) return;\n\n // 计算错误纠正码并打包位\n let rem: number = this.version; // version 是 uint6 类型,范围在 [7, 40]\n\n for (let i = 0; i < 12; i++) rem = (rem << 1) ^ ((rem >>> 11) * 0x1f25);\n const bits: number = (this.version << 12) | rem; // uint18\n\n assert(bits >>> 18 === 0);\n // 绘制两个副本\n for (let i = 0; i < 18; i++) {\n const color: boolean = getBit(bits, i);\n const a: number = this.size - 11 + (i % 3);\n const b: number = Math.floor(i / 3);\n\n this.setFunctionModule(a, b, color);\n this.setFunctionModule(b, a, color);\n }\n }\n // 绘制一个9*9的定位图案,包括边界分隔符,中心模块位于(x, y)。模块可以超出边界。\n private drawFinderPattern(x: number, y: number): void {\n for (let dy = -4; dy <= 4; dy++) {\n for (let dx = -4; dx <= 4; dx++) {\n const dist = Math.max(Math.abs(dx), Math.abs(dy)), // Chebyshev/无穷范数\n xx = x + dx,\n yy = y + dy;\n\n if (0 <= xx && xx < this.size && 0 <= yy && yy < this.size) {\n this.setFunctionModule(xx, yy, dist !== 2 && dist !== 4);\n }\n }\n }\n }\n // 绘制一个5*5的对齐图案,中心模块位于(x, y)。所有模块必须在边界内。\n private drawAlignmentPattern(x: number, y: number): void {\n for (let dy = -2; dy <= 2; dy++) {\n for (let dx = -2; dx <= 2; dx++) {\n this.setFunctionModule(x + dx, y + dy, Math.max(Math.abs(dx), Math.abs(dy)) !== 1);\n }\n }\n }\n // 设置模块的颜色并将其标记为功能模块。仅由构造函数使用。坐标必须在边界内。\n private setFunctionModule(x: number, y: number, isDark: boolean): void {\n this.modules[y][x] = isDark;\n this.isFunction[y][x] = true;\n }\n // 返回一个新的字节字符串,表示具有适当错误纠正码字的给定数据,基于该对象的版本和错误纠正级别。\n private addEccAndInterleave(data: Readonly<number[]>): number[] {\n const ver = this.version,\n ecl = this.errorCorrectionLevel;\n\n if (data.length !== getNumDataCodewords(ver, ecl)) {\n throw new RangeError('Invalid argument');\n }\n // 计算参数数值\n const numBlocks = NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver],\n blockEccLen = ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver],\n rawCodewords = Math.floor(getNumRawDataModules(ver) / 8),\n numShortBlocks = numBlocks - (rawCodewords % numBlocks),\n shortBlockLen = Math.floor(rawCodewords / numBlocks),\n blocks: number[][] = [], // 将数据分割成块并为每个块附加ECC\n rsDiv = reedSolomonComputeDivisor(blockEccLen);\n\n for (let i = 0, k = 0; i < numBlocks; i++) {\n const dat = data.slice(k, k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1));\n const ecc = reedSolomonComputeRemainder(dat, rsDiv);\n\n k += dat.length;\n if (i < numShortBlocks) dat.push(0);\n blocks.push(dat.concat(ecc));\n }\n // 将每个块的字节交错(而不是连接)成单个序列\n const result: number[] = [];\n\n for (let i = 0; i < blocks[0].length; i++) {\n blocks.forEach((block, j) => {\n // 跳过短块中的填充字节\n if (i !== shortBlockLen - blockEccLen || j >= numShortBlocks) {\n result.push(block[i]);\n }\n });\n }\n assert(result.length === rawCodewords);\n return result;\n }\n // 将给定的8位码字序列(数据和错误纠正)绘制到此QR码的整个\n // 数据区域上。在调用此方法之前需要标记功能模块。\n private drawCodewords(data: Readonly<number[]>): void {\n if (data.length !== Math.floor(getNumRawDataModules(this.version) / 8)) {\n throw new RangeError('Invalid argument');\n }\n let i = 0; // 数据的位索引\n const len = data.length * 8;\n\n // 执行特殊的之字形扫描\n for (let right = this.size - 1; right >= 1; right -= 2) {\n // 每对列中右列的索引\n if (right === 6) right = 5;\n for (let vert = 0; vert < this.size; vert++) {\n // 垂直计数器\n for (let j = 0; j < 2; j++) {\n const x = right - j, // 实际的x坐标\n y = ((right + 1) & 2) === 0 ? this.size - 1 - vert : vert; // 实际的y坐标\n\n if (!this.isFunction[y][x] && i < len) {\n this.modules[y][x] = getBit(data[i >>> 3], 7 - (i & 7));\n i++;\n }\n // 如果此QR码有任何剩余位(0到7位),它们被构造函数赋值为0/false/浅色,且此方法不会改变它们\n }\n }\n }\n assert(i === len);\n }\n // 掩码模式定义\n private readonly MASK_PATTERNS: ((_: number, y: number) => boolean)[] = [\n (x, y) => (x + y) % 2 === 0,\n (_, y) => y % 2 === 0,\n (x) => x % 3 === 0,\n (x, y) => (x + y) % 3 === 0,\n (x, y) => (Math.floor(x / 3) + Math.floor(y / 2)) % 2 === 0,\n (x, y) => ((x * y) % 2) + ((x * y) % 3) === 0,\n (x, y) => (((x * y) % 2) + ((x * y) % 3)) % 2 === 0,\n (x, y) => (((x + y) % 2) + ((x * y) % 3)) % 2 === 0,\n ] as const;\n // 使用给定的掩码模式对此QR码中的码字模块进行XOR运算。在掩码之前必须标记功能模块并绘制码字位。\n private applyMask(mask: number): void {\n if (mask < 0 || mask > 7) throw new RangeError('Mask value out of range');\n const maskPattern = this.MASK_PATTERNS[mask];\n\n for (let y = 0; y < this.size; y++) {\n for (let x = 0; x < this.size; x++) {\n if (!this.isFunction[y][x] && maskPattern(x, y)) {\n this.modules[y][x] = !this.modules[y][x];\n }\n }\n }\n }\n // 计算并返回基于此 QR 码当前模块状态的惩罚分数。用于自动掩码选择算法,以找到产生最低分数的掩码模式。\n private getPenaltyScore(): number {\n let result: number = 0;\n\n // 行中具有相同颜色的相邻模块,以及查找器类似的模式\n for (let y = 0; y < this.size; y++) {\n let runColor = false;\n let runX = 0;\n const runHistory = [0, 0, 0, 0, 0, 0, 0];\n\n for (let x = 0; x < this.size; x++) {\n if (this.modules[y][x] === runColor) {\n runX++;\n if (runX === 5) result += QrCode.PENALTY.N1;\n else if (runX > 5) result++;\n } else {\n this.finderPenaltyAddHistory(runX, runHistory);\n if (!runColor) {\n result += this.finderPenaltyCountPatterns(runHistory) * QrCode.PENALTY.N3;\n }\n runColor = this.modules[y][x];\n runX = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runX, runHistory) * QrCode.PENALTY.N3;\n }\n // 列中具有相同颜色的相邻模块,以及查找器类似的模式\n for (let x = 0; x < this.size; x++) {\n let runColor = false;\n let runY = 0;\n const runHistory = [0, 0, 0, 0, 0, 0, 0];\n\n for (let y = 0; y < this.size; y++) {\n if (this.modules[y][x] === runColor) {\n runY++;\n if (runY === 5) result += QrCode.PENALTY.N1;\n else if (runY > 5) result++;\n } else {\n this.finderPenaltyAddHistory(runY, runHistory);\n if (!runColor) {\n result += this.finderPenaltyCountPatterns(runHistory) * QrCode.PENALTY.N3;\n }\n runColor = this.modules[y][x];\n runY = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runY, runHistory) * QrCode.PENALTY.N3;\n }\n // 2*2 块的模块具相同的颜色\n for (let y = 0; y < this.size - 1; y++) {\n for (let x = 0; x < this.size - 1; x++) {\n const color = this.modules[y][x];\n\n if (\n color === this.modules[y][x + 1] &&\n color === this.modules[y + 1][x] &&\n color === this.modules[y + 1][x + 1]\n ) {\n result += QrCode.PENALTY.N2;\n }\n }\n }\n // 暗模块和亮模块的平衡\n let dark: number = 0;\n\n for (const row of this.modules) {\n dark = row.reduce((sum, color) => sum + (color ? 1 : 0), dark);\n }\n // 注意,size 是奇数,所以 dark/total !== 1/2\n const total: number = this.size * this.size;\n // 计算最小的整数 k >= 0,使得 (45-5k)% <= dark/total <= (55+5k)%\n const k: number = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1;\n\n assert(0 <= k && k <= 9);\n result += k * QrCode.PENALTY.N4;\n assert(0 <= result && result <= 2568888); // 基于默认值的非紧密上限\n return result;\n }\n // 返回一个升序的位置列表,表示此版本号的对齐模式位置。每个位置在 [0,177) 范围内,并用于行和列轴。这可以实现为 40 个可变长度整数列表的查找表。\n private getAlignmentPatternPositions(): number[] {\n if (this.version === 1) return [];\n const numAlign = Math.floor(this.version / 7) + 2,\n step = Math.floor((this.version * 8 + numAlign * 3 + 5) / (numAlign * 4 - 4)) * 2,\n result = [6];\n\n for (let pos = this.size - 7; result.length < numAlign; pos -= step) {\n result.splice(1, 0, pos);\n }\n return result;\n }\n // 只能在添加了亮色运行后立即调用,并返回 0、1 或 2。这是 getPenaltyScore() 的辅助函数。\n private finderPenaltyCountPatterns(runHistory: Readonly<number[]>): number {\n const n = runHistory[1];\n\n assert(n <= this.size * 3);\n // 提前验证 n 的有效性\n if (n <= 0) return 0;\n const validScore =\n runHistory[2] === n && runHistory[3] === n * 3 && runHistory[4] === n && runHistory[5] === n;\n\n if (!validScore) return 0;\n // 检查两端的延伸模式\n let score = 0;\n\n if (runHistory[0] >= n * 4 && runHistory[6] >= n) score++;\n if (runHistory[6] >= n * 4 && runHistory[0] >= n) score++;\n return score;\n }\n // 必须在行(或列)的模块结束时调用。这是 getPenaltyScore() 的辅助函数。\n private finderPenaltyTerminateAndCount(\n runColor: boolean,\n runLength: number,\n runHistory: number[],\n ): number {\n if (runColor) {\n // 终止暗色运行\n this.finderPenaltyAddHistory(runLength, runHistory);\n // eslint-disable-next-line no-param-reassign\n runLength = 0;\n }\n // eslint-disable-next-line no-param-reassign\n runLength += this.size; // 添加亮色边框到最终运行\n this.finderPenaltyAddHistory(runLength, runHistory);\n return this.finderPenaltyCountPatterns(runHistory);\n }\n // 将给定值推到前面并丢弃最后一个值。这是 getPenaltyScore() 的辅助函数。\n private finderPenaltyAddHistory(runLength: number, runHistory: number[]): void {\n // eslint-disable-next-line no-param-reassign\n if (runHistory[0] === 0) runLength += this.size; // 添加亮色边框到初始运行\n runHistory.pop();\n runHistory.unshift(runLength);\n }\n}\n// 将给定数值的低位比特位追加到给定缓冲区。要求 0 <= len <= 31 且 0 <= val < 2^len。\nfunction appendBits(val: number, len: number, bb: number[]): void {\n if (len < 0 || len > 31 || val >>> len !== 0) {\n throw new RangeError('Value out of range');\n }\n for (let i = len - 1; i >= 0; i--) {\n // 逐位追加\n bb.push((val >>> i) & 1);\n }\n}\n// 返回x的第i位是否为1。\nfunction getBit(x: number, i: number): boolean {\n return ((x >>> i) & 1) !== 0;\n}\n// 如果给定条件为false则抛出异常。\nfunction assert(cond: boolean): void {\n if (!cond) throw new Error('Assertion error');\n}\n/*\n * QR码符号中的 字符/二进制 数据段\n */\nclass QrSegment {\n // 使用给定的属性和数据创建一个新的QR码段。字符计数(numChars)必须与模式和位缓冲区长度一致,但不进行检查。给定的位缓冲区被克隆并存储。\n public constructor(\n // 此段的模式指示符。\n public readonly mode: QrMode,\n // 此段未编码数据的长度。对于数字/字母数字/汉字模式,以字符为单位测量;对于字节模式,以字节为单位测量;对于ECI模式,为0; 始终为零或正数。不是数据的位长度。\n public readonly numChars: number,\n // 此段的数据位。通过getData()访问。\n readonly bitData: number[],\n ) {\n if (numChars < 0) throw new RangeError('Invalid argument');\n this.bitData = bitData.slice(); // 进行防御性拷贝\n }\n // 返回此段数据位的新副本。\n public getData(): number[] {\n return this.bitData.slice(); // 进行防御性拷贝\n }\n}\nconst NUMERIC_REGEX: RegExp = /^[0-9]*$/;\nconst ALPHANUMERIC_REGEX: RegExp = /^[A-Z0-9 $%*+./:-]*$/;\n// 字母数字模式中所有合法字符的集合,其中每个字符值映射到字符串中的索引。\nconst ALPHANUMERIC_CHARSET: string = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:';\n\n// 是否可以用数字模式编码。当且仅当每个字符都在0到9的范围内时,字符串可编码。\nfunction isNumeric(text: string): boolean {\n return NUMERIC_REGEX.test(text);\n}\n/**\n * 是否可以用字母数字模式编码\n * @description 0到9、A到Z仅大写)、空格、美元符号、百分号、星号、加号、连字符、句点、斜杠、冒号。\n * @param {String} text 给定字符串\n * @returns {Boolean} boolean\n */\nfunction isAlphanumeric(text: string): boolean {\n return ALPHANUMERIC_REGEX.test(text);\n}\n// 返回一个表示以字节模式编码的给定二进制数据的段。所有输入字节数组都是可接受的。任何文本字符串都可以转换为UTF-8字节并编码为字节模式段。\nfunction makeBytes(data: Readonly<number[]>): QrSegment {\n const bb: number[] = [];\n\n for (const b of data) appendBits(b, 8, bb);\n return new QrSegment(QrMode.get('BYTE'), data.length, bb);\n}\n// 计算并返回在给定版本下编码给定段所需的位数。如果某个段的字符数太多以至于无法适应其长度字段,则结果为无穷大。\nfunction getTotalBits(segs: Readonly<QrSegment[]>, version: number): number {\n let result: number = 0;\n\n for (const seg of segs) {\n const ccbits: number = seg.mode.numCharCountBits(version);\n\n if (seg.numChars >= 1 << ccbits) return Infinity; // 段的长度不适合字段的位宽度\n result += 4 + ccbits + seg.bitData.length;\n }\n return result;\n}\n// 返回一个表示以数字模式编码的给定十进制数字字符串的段。\nfunction makeNumeric(digits: string): QrSegment {\n if (!isNumeric(digits)) {\n throw new RangeError('String contains non-numeric characters');\n }\n const bb: number[] = [];\n\n for (let i = 0; i < digits.length; ) {\n // 每次迭代最多消耗3个数字\n const n: number = Math.min(digits.length - i, 3);\n\n appendBits(parseInt(digits.substring(i, i + n), 10), n * 3 + 1, bb);\n i += n;\n }\n return new QrSegment(QrMode.get('NUMERIC'), digits.length, bb);\n}\n// 返回一个表示以字母数字模式编码的给定文本字符串的段。允许的字符是:0到9、A到Z(仅大写)、空格、美元符号、百分号、星号、加号、连字符、句点、斜杠、冒号。\nfunction makeAlphanumeric(text: string): QrSegment {\n if (!isAlphanumeric(text)) {\n throw new RangeError('String contains unencodable characters in alphanumeric mode');\n }\n const bb: number[] = [];\n let i: number;\n\n for (i = 0; i + 2 <= text.length; i += 2) {\n // 处理每组2个字符\n let temp = ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)) * 45;\n\n temp += ALPHANUMERIC_CHARSET.indexOf(text.charAt(i + 1));\n appendBits(temp, 11, bb);\n }\n // 剩下1个字符\n if (i < text.length) {\n appendBits(ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)), 6, bb);\n }\n return new QrSegment(QrMode.get('ALPHANUMERIC'), text.length, bb);\n}\n/*\n * QR码符号中的错误纠正级别\n */\nexport class Ecc {\n private constructor(\n // 在0到3范围内(无符号2位整数)。\n public readonly ordinal: IntRange<0, 4>,\n // (包私有) 在0到3范围内(无符号2位整数)。\n public readonly formatBits: IntRange<0, 4>,\n ) {}\n private static readonly LEVELS = {\n LOW: new Ecc(0, 1), // 7% 错误容忍率\n MEDIUM: new Ecc(1, 0), // 15% 错误容忍率\n QUARTILE: new Ecc(2, 3), // 25% 错误容忍率\n HIGH: new Ecc(3, 2), // 30% 错误容忍率\n } as const;\n // 获取指定级别的 ECC\n public static get(level: keyof typeof Ecc.LEVELS): Ecc {\n return Ecc.LEVELS[level];\n }\n}\n/*\n * 描述如何解释段的数据位。不可变。\n */\nclass QrMode {\n private constructor(\n // 模式指示位,是一个uint4值(范围0到15)。\n public readonly modeBits: IntRange<0, 16>,\n // 三个不同版本范围的字符计数位数。\n private readonly numBitsCharCount: readonly [number, number, number],\n ) {}\n private static readonly modes = {\n NUMERIC: new QrMode(0x1, [10, 12, 14]),\n ALPHANUMERIC: new QrMode(0x2, [9, 11, 13]),\n BYTE: new QrMode(0x4, [8, 16, 16]),\n KANJI: new QrMode(0x8, [8, 10, 12]),\n ECI: new QrMode(0x7, [0, 0, 0]),\n } as const;\n public static get(mode: keyof typeof QrMode.modes) {\n return QrMode.modes[mode];\n }\n // 范围计算\n public numCharCountBits(version: number): number {\n return this.numBitsCharCount[Math.floor((version + 7) / 17)];\n }\n}\n\ntype Enumerate<N extends number, Acc extends number[] = []> = Acc['length'] extends N\n ? Acc[number]\n : Enumerate<N, [...Acc, Acc['length']]>;\n\nexport type IntRange<F extends number, T extends number> = Exclude<Enumerate<T>, Enumerate<F>>;\n"],"names":["ECC_CODEWORDS_PER_BLOCK","NUM_ERROR_CORRECTION_BLOCKS","getNumRawDataModules","ver","QrCode","VERSION","MIN","MAX","RangeError","result","numAlign","Math","floor","assert","getNumDataCodewords","ecl","ordinal","encodeSegments","segs","minVersion","maxVersion","mask","boostEcl","version","dataUsedBits","_ecl","dataCapacityBits","usedBits","getTotalBits","seg","ccbits","mode","numCharCountBits","numChars","Infinity","bitData","length","newEcl","Ecc","get","bb","b","appendBits","modeBits","getData","push","min","padByte","dataCodewords","forEach","i","makeSegments","text","NUMERIC_REGEX","test","makeNumeric","digits","n","parseInt","substring","QrSegment","QrMode","ALPHANUMERIC_REGEX","makeAlphanumeric","temp","ALPHANUMERIC_CHARSET","indexOf","charAt","makeBytes","data","toUtf8ByteArray","str","encodeURI","charCodeAt","reedSolomonMultiply","x","y","z","selectMask","msk","minPenalty","applyMask","drawFormatBits","penalty","getPenaltyScore","getModule","size","modules","drawFunctionPatterns","flag","setFunctionModule","drawFinderPattern","alignPatPos","getAlignmentPatternPositions","j","drawAlignmentPattern","drawVersion","errorCorrectionLevel","formatBits","rem","bits","getBit","color","a","dy","dx","dist","max","abs","xx","yy","isDark","isFunction","addEccAndInterleave","numBlocks","blockEccLen","rawCodewords","numShortBlocks","shortBlockLen","blocks","rsDiv","reedSolomonComputeDivisor","degree","root","k","dat","slice","ecc","reedSolomonComputeRemainder","divisor","map","factor","shift","coef","concat","block","drawCodewords","len","right","vert","maskPattern","MASK_PATTERNS","runColor","runX","runHistory","PENALTY","N1","finderPenaltyAddHistory","finderPenaltyCountPatterns","N3","finderPenaltyTerminateAndCount","runY","N2","dark","row","reduce","sum","total","ceil","N4","step","pos","splice","score","runLength","pop","unshift","_","Array","fill","allCodewords","val","cond","Error","level","LEVELS","LOW","MEDIUM","QUARTILE","HIGH","modes","numBitsCharCount","NUMERIC","ALPHANUMERIC","BYTE","KANJI","ECI"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../components/qrcode/qrcode.ts"],"sourcesContent":["/*\n * QR Code generator library\n *\n * Copyright (c) Project Nayuki. (MIT License)\n * https://www.nayuki.io/page/qr-code-generator-library\n */\n\n// 注意索引0用于填充,并设置为一个非法值\nconst ECC_CODEWORDS_PER_BLOCK = [\n [\n -1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30,\n 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n ], // Low\n [\n -1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28,\n 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n ], // Medium\n [\n -1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30,\n 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n ], // Quartile\n [\n -1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30,\n 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n ], // High\n];\nconst NUM_ERROR_CORRECTION_BLOCKS = [\n [\n -1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14,\n 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25,\n ],\n [\n -1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23,\n 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49,\n ],\n [\n -1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34,\n 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68,\n ],\n [\n -1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35,\n 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81,\n ],\n];\n\n// 返回在给定版本的QR码中可以存储的数据位数,已排除所有功能模块。这包括余数位,因此可能不是8的倍数。结果范围在[208, 29648]之间。这可以实现为一个40项的查找表。\nfunction getNumRawDataModules(ver: number): number {\n if (ver < QrCode.VERSION.MIN || ver > QrCode.VERSION.MAX) {\n throw new RangeError('Version number out of range');\n }\n let result = (16 * ver + 128) * ver + 64;\n\n if (ver >= 2) {\n const numAlign = Math.floor(ver / 7) + 2;\n\n result -= (25 * numAlign - 10) * numAlign - 55;\n if (ver >= 7) result -= 36;\n }\n assert(208 <= result && result <= 29648);\n return result;\n}\n// 返回指定版本号和纠错级别的 QR 码包含的 8 位数据码字数量(即非纠错码字),余位被舍弃。这个无状态的纯函数可以实现为一个 (40*4) 大小的查找表。\nfunction getNumDataCodewords(ver: number, ecl: Ecc): number {\n return (\n Math.floor(getNumRawDataModules(ver) / 8) -\n ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver] * NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver]\n );\n}\n/**\n * 生成一个 QR 码\n * @description\n * 根据给定的数据段和编码参数生成 QR 码。输出时会自动选择给定范围内尽可能小的 QR 码版本\n * @param {Readonly<QrSegment[]>} segs - 要编码的 QR 数据段\n * @param {Ecc} ecl - 纠错级别\n * @param {IntRange<1, 41>} [minVersion=1] - 最小版本(默认为 1)\n * @param {IntRange<1, 41>} [maxVersion=40] - 最大版本(默认为 40)\n * @param {-1 | IntRange<0, 8>} [mask=-1] - 掩码模式(默认为 -1,表示自动选择)\n * @param {boolean} [boostEcl=true] - 在数据仍然适合当前版本号的情况下提高纠错级别(默认为 true)。\n * @returns {QrCode} 返回生成的 QR 码。\n */\nexport function encodeSegments(\n segs: Readonly<QrSegment[]>,\n ecl: Ecc,\n minVersion: IntRange<1, 41> = 1,\n maxVersion: IntRange<1, 41> = 40,\n mask: -1 | IntRange<0, 8> = -1,\n boostEcl: boolean = true,\n): QrCode {\n if (\n !(\n QrCode.VERSION.MIN <= minVersion &&\n minVersion <= maxVersion &&\n maxVersion <= QrCode.VERSION.MAX\n ) ||\n mask < -1 ||\n mask > 7\n ) {\n throw new RangeError('Invalid value');\n }\n // 查找要使用的最小版本号\n let version: IntRange<1, 41>,\n dataUsedBits: number,\n _ecl = ecl;\n\n for (version = minVersion; ; version++) {\n const dataCapacityBits = getNumDataCodewords(version, _ecl) * 8, // 可用的数据位数\n usedBits = getTotalBits(segs, version);\n\n // 找到合适的版本号\n if (usedBits <= dataCapacityBits) {\n dataUsedBits = usedBits;\n break;\n }\n if (version >= maxVersion) {\n // 范围内的所有版本都无法容纳给定数据\n throw new RangeError('Data too long');\n }\n }\n // 提高纠错级别; 从低到高\n if (boostEcl) {\n for (const newEcl of [Ecc.get('MEDIUM'), Ecc.get('QUARTILE'), Ecc.get('HIGH')]) {\n if (dataUsedBits <= getNumDataCodewords(version, newEcl) * 8) _ecl = newEcl;\n }\n }\n // 连接所有段以创建数据位字符串\n const bb: number[] = [];\n\n for (const seg of segs) {\n appendBits(seg.mode.modeBits, 4, bb);\n appendBits(seg.numChars, seg.mode.numCharCountBits(version), bb);\n for (const b of seg.getData()) bb.push(b);\n }\n assert(bb.length === dataUsedBits);\n // 添加终止符并填充至字节边界(如果适用)\n const dataCapacityBits: number = getNumDataCodewords(version, _ecl) * 8;\n\n assert(bb.length <= dataCapacityBits);\n appendBits(0, Math.min(4, dataCapacityBits - bb.length), bb);\n appendBits(0, (8 - (bb.length % 8)) % 8, bb);\n assert(bb.length % 8 === 0);\n // 用交替字节填充直到达到数据容量\n for (let padByte = 0xec; bb.length < dataCapacityBits; padByte ^= 0xec ^ 0x11) {\n appendBits(padByte, 8, bb);\n }\n // 以大端序将位打包成字节\n const dataCodewords: number[] = [];\n\n while (dataCodewords.length * 8 < bb.length) dataCodewords.push(0);\n bb.forEach((b, i) => (dataCodewords[i >>> 3] |= b << (7 - (i & 7))));\n return new QrCode(version, _ecl, dataCodewords, mask);\n}\n\n// 返回表示给定字符串的UTF-8编码字节数组\nfunction toUtf8ByteArray(str: string): number[] {\n // eslint-disable-next-line no-param-reassign\n str = encodeURI(str);\n const result: number[] = [];\n\n for (let i = 0; i < str.length; i++) {\n if (str.charAt(i) !== '%') result.push(str.charCodeAt(i));\n else {\n result.push(parseInt(str.substring(i + 1, i + 3), 16));\n i += 2;\n }\n }\n return result;\n}\n\n// 返回一个新的可变段列表,用于表示给定的Unicode文本字符串。结果可能使用各种段模式并切换模式以优化位流的长度。\nexport function makeSegments(text: string): QrSegment[] {\n // 自动选择最高效的段编码\n if (text === '') return [];\n else if (isNumeric(text)) return [makeNumeric(text)];\n else if (isAlphanumeric(text)) return [makeAlphanumeric(text)];\n return [makeBytes(toUtf8ByteArray(text))];\n}\n\nfunction reedSolomonComputeDivisor(degree: number): number[] {\n if (degree < 1 || degree > 255) throw new RangeError('Degree out of range');\n // 多项式系数按从高到低的幂次存储,不包括始终为1的首项。\n // 例如多项式 x^3 + 255x^2 + 8x + 93 存储为uint8数组 [255, 8, 93]。\n const result: number[] = [];\n\n for (let i = 0; i < degree - 1; i++) result.push(0);\n result.push(1); // Start off with the monomial x^0\n\n // 计算多项式乘积 (x - r^0) * (x - r^1) * (x - r^2) * ... * (x - r^{degree-1}),\n // 并舍弃最高次项(该项始终为 1x^degree)。\n // 注意 r = 0x02,它是有限域 GF(2^8/0x11D) 的生成元。\n let root = 1;\n\n for (let i = 0; i < degree; i++) {\n // 将当前结果乘以 (x - r^i)\n for (let j = 0; j < result.length; j++) {\n result[j] = reedSolomonMultiply(result[j], root);\n if (j + 1 < result.length) result[j] ^= result[j + 1];\n }\n root = reedSolomonMultiply(root, 0x02);\n }\n return result;\n}\n\n// 返回给定数据和除数多项式的里德-所罗门错误纠正码字。\nfunction reedSolomonComputeRemainder(\n data: Readonly<number[]>,\n divisor: Readonly<number[]>,\n): number[] {\n const result = divisor.map(() => 0);\n\n for (const b of data) {\n // 多项式除法\n const factor = b ^ (result.shift() as number);\n\n result.push(0);\n divisor.forEach((coef, i) => (result[i] ^= reedSolomonMultiply(coef, factor)));\n }\n return result;\n}\n\n// 返回两个给定域元素模GF(2^8/0x11D)的乘积。参数和结果\n// 都是无符号8位整数。这可以实现为256*256个uint8条目的查找表。\nfunction reedSolomonMultiply(x: number, y: number): number {\n if (x >>> 8 !== 0 || y >>> 8 !== 0) throw new RangeError('Byte out of range');\n // 俄罗斯农民乘法\n let z: number = 0;\n\n for (let i = 7; i >= 0; i--) {\n z = (z << 1) ^ ((z >>> 7) * 0x11d);\n z ^= ((y >>> i) & 1) * x;\n }\n assert(z >>> 8 === 0);\n return z;\n}\n\n/*\n * 由 Denso Wave 发明,并在 ISO/IEC 18004 标准中描述。\n * 此类的实例表示一个不可变的暗/亮单元方格网。\n * 该类遵循 QR 码模型 2 规范,支持所有版本(尺寸)从 1 到 40、4 种纠错等级以及 4 种字符编码模式。\n */\nclass QrCode {\n // QR Code 的模块(false 表示浅色,true 表示深色)。构造函数完成后不可更改。通过 getModule() 访问。\n private readonly modules: boolean[][] = [];\n // 表示不受掩模影响的功能模块。构造函数完成后即被丢弃。\n private readonly isFunction: boolean[][] = [];\n /**\n * 获取 QR Code 的宽度和高度,以模块为单位。\n * 宽度和高度范围为 21 至 177(包括边界)。宽度和高度的计算公式为:`version * 4 + 17`。\n */\n public readonly size: number;\n /**\n * 获取 QR Code 所使用的掩膜模式的索引值。掩膜模式索引值范围为 0 到 7(包括边界)。即使 QR Code 是通过自动掩膜(mask = -1)生成的,最终的掩膜值仍然是 0 到 7 之间的有效值。\n */\n public readonly mask: IntRange<0, 8>;\n // 支持的版本, QR码模型2标准\n public static readonly VERSION = {\n MIN: 1,\n MAX: 40,\n } as const;\n // 惩罚分数常量, 用于 getPenaltyScore(),在评估哪个掩码最佳时使用。\n private static readonly PENALTY = {\n N1: 3, // 相同颜色的连续模块\n N2: 3, // 2x2 块\n N3: 40, // 查找器类似模式\n N4: 10, // 暗模块比例\n } as const;\n // 选择最佳掩码\n private selectMask(msk: -1 | IntRange<0, 8>): IntRange<0, 8> {\n if (msk !== -1) return msk;\n let mask: IntRange<0, 8> = 0;\n let minPenalty = 1000000000;\n\n for (let i = 0; i < 8; i++) {\n // 自动选择最佳掩模\n this.applyMask(i);\n this.drawFormatBits(i);\n const penalty = this.getPenaltyScore();\n\n if (penalty < minPenalty) {\n mask = i as IntRange<0, 8>;\n minPenalty = penalty;\n }\n // 撤销掩码\n this.applyMask(i);\n }\n assert(0 <= mask && mask <= 7);\n return mask;\n }\n // 使用给定的版本号、错误纠正级别、数据码字节和掩膜编号创建一个新的QR码。\n public constructor(\n // 此 QR Code 的版本号,范围为 1 到 40(含);该值决定了二维码的尺寸。\n public readonly version: IntRange<1, 41>,\n // 错误纠正级别。\n public readonly errorCorrectionLevel: Ecc,\n dataCodewords: Readonly<number[]>,\n msk: -1 | IntRange<0, 8>,\n ) {\n // 验证构造函数参数\n if (version < QrCode.VERSION.MIN || version > QrCode.VERSION.MAX) {\n throw new RangeError('Version value out of range');\n }\n if (msk < -1 || msk > 7) throw new RangeError('Mask value out of range');\n // 初始化\n this.size = version * 4 + 17;\n // 创建模块数组\n // 初始化两个网格为 size*size 大小的布尔数组,初始值为 false 全为浅色\n const row = Array(this.size).fill(false);\n\n for (let i = 0; i < this.size; i++) {\n this.modules[i] = row.slice();\n this.isFunction[i] = row.slice();\n }\n // 计算错误纠正码(ECC),绘制模块\n this.drawFunctionPatterns();\n // 构建 QR 码的主要流程\n const allCodewords = this.addEccAndInterleave(dataCodewords);\n\n this.drawCodewords(allCodewords);\n // 确定最终掩码\n this.mask = this.selectMask(msk);\n // 应用最终掩码并绘制格式位\n this.applyMask(this.mask);\n this.drawFormatBits(this.mask);\n // 构造完成, 丢弃\n this.isFunction = [];\n }\n\n /* -- 访问器方法 --*/\n // 返回给定坐标处模块(像素xy的颜色,浅色时为false,深色时为true);如果给定的坐标超出边界,则返回false(浅色)。\n public getModule(x: number, y: number): boolean {\n return x >= 0 && x < this.size && y >= 0 && y < this.size && this.modules[y][x];\n }\n /* -- 构造函数的私有辅助方法:绘制功能模块 --*/\n\n // 读取该对象的版本字段,并绘制和标记所有功能模块。\n private drawFunctionPatterns(): void {\n // 绘制水平和垂直定时图案\n for (let i = 0; i < this.size; i++) {\n const flag = i % 2 === 0;\n\n this.setFunctionModule(6, i, flag);\n this.setFunctionModule(i, 6, flag);\n }\n // 绘制 3 个定位图案(除了右下角的所有角落;会覆盖一些定时模块)\n this.drawFinderPattern(3, 3);\n const y = this.size - 4;\n\n this.drawFinderPattern(y, 3);\n this.drawFinderPattern(3, y);\n // 绘制多个对齐图案\n const alignPatPos = this.getAlignmentPatternPositions();\n const numAlign = alignPatPos.length;\n\n for (let i = 0; i < numAlign; i++) {\n for (let j = 0; j < numAlign; j++) {\n // 不在三个定位图案的角落处绘制\n if (\n !(\n (i === 0 && j === 0) ||\n (i === 0 && j === numAlign - 1) ||\n (i === numAlign - 1 && j === 0)\n )\n ) {\n this.drawAlignmentPattern(alignPatPos[i], alignPatPos[j]);\n }\n }\n }\n // 绘制配置数据\n this.drawFormatBits(0); // 临时掩码值;稍后在构造函数中会被覆盖\n this.drawVersion();\n }\n\n // 绘制格式位的两个副本(带有其自己的错误纠正码)\n // 基于给定的掩码和该对象的错误纠正级别字段。\n private drawFormatBits(mask: number): void {\n // 计算错误纠正码并打包位\n const data: number = (this.errorCorrectionLevel.formatBits << 3) | mask; // errCorrLvl 是 uint2 类型,mask 是 uint3 类型\n let rem: number = data;\n\n for (let i = 0; i < 10; i++) rem = (rem << 1) ^ ((rem >>> 9) * 0x537);\n const bits = ((data << 10) | rem) ^ 0x5412; // uint15\n\n assert(bits >>> 15 === 0);\n // 绘制第一个副本\n for (let i = 0; i <= 5; i++) this.setFunctionModule(8, i, getBit(bits, i));\n this.setFunctionModule(8, 7, getBit(bits, 6));\n this.setFunctionModule(8, 8, getBit(bits, 7));\n this.setFunctionModule(7, 8, getBit(bits, 8));\n for (let i = 9; i < 15; i++) {\n this.setFunctionModule(14 - i, 8, getBit(bits, i));\n }\n // 绘制第二个副本\n for (let i = 0; i < 8; i++) {\n this.setFunctionModule(this.size - 1 - i, 8, getBit(bits, i));\n }\n for (let i = 8; i < 15; i++) {\n this.setFunctionModule(8, this.size - 15 + i, getBit(bits, i));\n }\n this.setFunctionModule(8, this.size - 8, true); // Always dark\n }\n\n // 如果7 <= version <= 40,则绘制版本位的两个副本(带有其自己的错误纠正码),\n // 基于该对象的版本字段。\n private drawVersion(): void {\n if (this.version < 7) return;\n\n // 计算错误纠正码并打包位\n let rem: number = this.version; // version 是 uint6 类型,范围在 [7, 40]\n\n for (let i = 0; i < 12; i++) rem = (rem << 1) ^ ((rem >>> 11) * 0x1f25);\n const bits: number = (this.version << 12) | rem; // uint18\n\n assert(bits >>> 18 === 0);\n // 绘制两个副本\n for (let i = 0; i < 18; i++) {\n const color: boolean = getBit(bits, i);\n const a: number = this.size - 11 + (i % 3);\n const b: number = Math.floor(i / 3);\n\n this.setFunctionModule(a, b, color);\n this.setFunctionModule(b, a, color);\n }\n }\n // 绘制一个9*9的定位图案,包括边界分隔符,中心模块位于(x, y)。模块可以超出边界。\n private drawFinderPattern(x: number, y: number): void {\n for (let dy = -4; dy <= 4; dy++) {\n for (let dx = -4; dx <= 4; dx++) {\n const dist = Math.max(Math.abs(dx), Math.abs(dy)), // Chebyshev/无穷范数\n xx = x + dx,\n yy = y + dy;\n\n if (0 <= xx && xx < this.size && 0 <= yy && yy < this.size) {\n this.setFunctionModule(xx, yy, dist !== 2 && dist !== 4);\n }\n }\n }\n }\n // 绘制一个5*5的对齐图案,中心模块位于(x, y)。所有模块必须在边界内。\n private drawAlignmentPattern(x: number, y: number): void {\n for (let dy = -2; dy <= 2; dy++) {\n for (let dx = -2; dx <= 2; dx++) {\n this.setFunctionModule(x + dx, y + dy, Math.max(Math.abs(dx), Math.abs(dy)) !== 1);\n }\n }\n }\n // 设置模块的颜色并将其标记为功能模块。仅由构造函数使用。坐标必须在边界内。\n private setFunctionModule(x: number, y: number, isDark: boolean): void {\n this.modules[y][x] = isDark;\n this.isFunction[y][x] = true;\n }\n // 返回一个新的字节字符串,表示具有适当错误纠正码字的给定数据,基于该对象的版本和错误纠正级别。\n private addEccAndInterleave(data: Readonly<number[]>): number[] {\n const ver = this.version,\n ecl = this.errorCorrectionLevel;\n\n if (data.length !== getNumDataCodewords(ver, ecl)) {\n throw new RangeError('Invalid argument');\n }\n // 计算参数数值\n const numBlocks = NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver],\n blockEccLen = ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver],\n rawCodewords = Math.floor(getNumRawDataModules(ver) / 8),\n numShortBlocks = numBlocks - (rawCodewords % numBlocks),\n shortBlockLen = Math.floor(rawCodewords / numBlocks),\n blocks: number[][] = [], // 将数据分割成块并为每个块附加ECC\n rsDiv = reedSolomonComputeDivisor(blockEccLen);\n\n for (let i = 0, k = 0; i < numBlocks; i++) {\n const dat = data.slice(k, k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1));\n const ecc = reedSolomonComputeRemainder(dat, rsDiv);\n\n k += dat.length;\n if (i < numShortBlocks) dat.push(0);\n blocks.push(dat.concat(ecc));\n }\n // 将每个块的字节交错(而不是连接)成单个序列\n const result: number[] = [];\n\n for (let i = 0; i < blocks[0].length; i++) {\n blocks.forEach((block, j) => {\n // 跳过短块中的填充字节\n if (i !== shortBlockLen - blockEccLen || j >= numShortBlocks) {\n result.push(block[i]);\n }\n });\n }\n assert(result.length === rawCodewords);\n return result;\n }\n // 将给定的8位码字序列(数据和错误纠正)绘制到此QR码的整个\n // 数据区域上。在调用此方法之前需要标记功能模块。\n private drawCodewords(data: Readonly<number[]>): void {\n if (data.length !== Math.floor(getNumRawDataModules(this.version) / 8)) {\n throw new RangeError('Invalid argument');\n }\n let i = 0; // 数据的位索引\n const len = data.length * 8;\n\n // 执行特殊的之字形扫描\n for (let right = this.size - 1; right >= 1; right -= 2) {\n // 每对列中右列的索引\n if (right === 6) right = 5;\n for (let vert = 0; vert < this.size; vert++) {\n // 垂直计数器\n for (let j = 0; j < 2; j++) {\n const x = right - j, // 实际的x坐标\n y = ((right + 1) & 2) === 0 ? this.size - 1 - vert : vert; // 实际的y坐标\n\n if (!this.isFunction[y][x] && i < len) {\n this.modules[y][x] = getBit(data[i >>> 3], 7 - (i & 7));\n i++;\n }\n // 如果此QR码有任何剩余位(0到7位),它们被构造函数赋值为0/false/浅色,且此方法不会改变它们\n }\n }\n }\n assert(i === len);\n }\n // 掩码模式定义\n private readonly MASK_PATTERNS: ((_: number, y: number) => boolean)[] = [\n (x, y) => (x + y) % 2 === 0,\n (_, y) => y % 2 === 0,\n (x) => x % 3 === 0,\n (x, y) => (x + y) % 3 === 0,\n (x, y) => (Math.floor(x / 3) + Math.floor(y / 2)) % 2 === 0,\n (x, y) => ((x * y) % 2) + ((x * y) % 3) === 0,\n (x, y) => (((x * y) % 2) + ((x * y) % 3)) % 2 === 0,\n (x, y) => (((x + y) % 2) + ((x * y) % 3)) % 2 === 0,\n ] as const;\n // 使用给定的掩码模式对此QR码中的码字模块进行XOR运算。在掩码之前必须标记功能模块并绘制码字位。\n private applyMask(mask: number): void {\n if (mask < 0 || mask > 7) throw new RangeError('Mask value out of range');\n const maskPattern = this.MASK_PATTERNS[mask];\n\n for (let y = 0; y < this.size; y++) {\n for (let x = 0; x < this.size; x++) {\n if (!this.isFunction[y][x] && maskPattern(x, y)) {\n this.modules[y][x] = !this.modules[y][x];\n }\n }\n }\n }\n // 计算并返回基于此 QR 码当前模块状态的惩罚分数。用于自动掩码选择算法,以找到产生最低分数的掩码模式。\n private getPenaltyScore(): number {\n let result: number = 0;\n\n // 行中具有相同颜色的相邻模块,以及查找器类似的模式\n for (let y = 0; y < this.size; y++) {\n let runColor = false;\n let runX = 0;\n const runHistory = [0, 0, 0, 0, 0, 0, 0];\n\n for (let x = 0; x < this.size; x++) {\n if (this.modules[y][x] === runColor) {\n runX++;\n if (runX === 5) result += QrCode.PENALTY.N1;\n else if (runX > 5) result++;\n } else {\n this.finderPenaltyAddHistory(runX, runHistory);\n if (!runColor) {\n result += this.finderPenaltyCountPatterns(runHistory) * QrCode.PENALTY.N3;\n }\n runColor = this.modules[y][x];\n runX = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runX, runHistory) * QrCode.PENALTY.N3;\n }\n // 列中具有相同颜色的相邻模块,以及查找器类似的模式\n for (let x = 0; x < this.size; x++) {\n let runColor = false;\n let runY = 0;\n const runHistory = [0, 0, 0, 0, 0, 0, 0];\n\n for (let y = 0; y < this.size; y++) {\n if (this.modules[y][x] === runColor) {\n runY++;\n if (runY === 5) result += QrCode.PENALTY.N1;\n else if (runY > 5) result++;\n } else {\n this.finderPenaltyAddHistory(runY, runHistory);\n if (!runColor) {\n result += this.finderPenaltyCountPatterns(runHistory) * QrCode.PENALTY.N3;\n }\n runColor = this.modules[y][x];\n runY = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runY, runHistory) * QrCode.PENALTY.N3;\n }\n // 2*2 块的模块具相同的颜色\n for (let y = 0; y < this.size - 1; y++) {\n for (let x = 0; x < this.size - 1; x++) {\n const color = this.modules[y][x];\n\n if (\n color === this.modules[y][x + 1] &&\n color === this.modules[y + 1][x] &&\n color === this.modules[y + 1][x + 1]\n ) {\n result += QrCode.PENALTY.N2;\n }\n }\n }\n // 暗模块和亮模块的平衡\n let dark: number = 0;\n\n for (const row of this.modules) {\n dark = row.reduce((sum, color) => sum + (color ? 1 : 0), dark);\n }\n // 注意,size 是奇数,所以 dark/total !== 1/2\n const total: number = this.size * this.size;\n // 计算最小的整数 k >= 0,使得 (45-5k)% <= dark/total <= (55+5k)%\n const k: number = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1;\n\n assert(0 <= k && k <= 9);\n result += k * QrCode.PENALTY.N4;\n assert(0 <= result && result <= 2568888); // 基于默认值的非紧密上限\n return result;\n }\n // 返回一个升序的位置列表,表示此版本号的对齐模式位置。每个位置在 [0,177) 范围内,并用于行和列轴。这可以实现为 40 个可变长度整数列表的查找表。\n private getAlignmentPatternPositions(): number[] {\n if (this.version === 1) return [];\n const numAlign = Math.floor(this.version / 7) + 2,\n step = Math.floor((this.version * 8 + numAlign * 3 + 5) / (numAlign * 4 - 4)) * 2,\n result = [6];\n\n for (let pos = this.size - 7; result.length < numAlign; pos -= step) {\n result.splice(1, 0, pos);\n }\n return result;\n }\n // 只能在添加了亮色运行后立即调用,并返回 0、1 或 2。这是 getPenaltyScore() 的辅助函数。\n private finderPenaltyCountPatterns(runHistory: Readonly<number[]>): number {\n const n = runHistory[1];\n\n assert(n <= this.size * 3);\n // 提前验证 n 的有效性\n if (n <= 0) return 0;\n const validScore =\n runHistory[2] === n && runHistory[3] === n * 3 && runHistory[4] === n && runHistory[5] === n;\n\n if (!validScore) return 0;\n // 检查两端的延伸模式\n let score = 0;\n\n if (runHistory[0] >= n * 4 && runHistory[6] >= n) score++;\n if (runHistory[6] >= n * 4 && runHistory[0] >= n) score++;\n return score;\n }\n // 必须在行(或列)的模块结束时调用。这是 getPenaltyScore() 的辅助函数。\n private finderPenaltyTerminateAndCount(\n runColor: boolean,\n runLength: number,\n runHistory: number[],\n ): number {\n if (runColor) {\n // 终止暗色运行\n this.finderPenaltyAddHistory(runLength, runHistory);\n // eslint-disable-next-line no-param-reassign\n runLength = 0;\n }\n // eslint-disable-next-line no-param-reassign\n runLength += this.size; // 添加亮色边框到最终运行\n this.finderPenaltyAddHistory(runLength, runHistory);\n return this.finderPenaltyCountPatterns(runHistory);\n }\n // 将给定值推到前面并丢弃最后一个值。这是 getPenaltyScore() 的辅助函数。\n private finderPenaltyAddHistory(runLength: number, runHistory: number[]): void {\n // eslint-disable-next-line no-param-reassign\n if (runHistory[0] === 0) runLength += this.size; // 添加亮色边框到初始运行\n runHistory.pop();\n runHistory.unshift(runLength);\n }\n}\n// 将给定数值的低位比特位追加到给定缓冲区。要求 0 <= len <= 31 且 0 <= val < 2^len。\nfunction appendBits(val: number, len: number, bb: number[]): void {\n if (len < 0 || len > 31 || val >>> len !== 0) {\n throw new RangeError('Value out of range');\n }\n for (let i = len - 1; i >= 0; i--) {\n // 逐位追加\n bb.push((val >>> i) & 1);\n }\n}\n// 返回x的第i位是否为1。\nfunction getBit(x: number, i: number): boolean {\n return ((x >>> i) & 1) !== 0;\n}\n// 如果给定条件为false则抛出异常。\nfunction assert(cond: boolean): void {\n if (!cond) throw new Error('Assertion error');\n}\n/*\n * QR码符号中的 字符/二进制 数据段\n */\nclass QrSegment {\n // 使用给定的属性和数据创建一个新的QR码段。字符计数(numChars)必须与模式和位缓冲区长度一致,但不进行检查。给定的位缓冲区被克隆并存储。\n public constructor(\n // 此段的模式指示符。\n public readonly mode: QrMode,\n // 此段未编码数据的长度。对于数字/字母数字/汉字模式,以字符为单位测量;对于字节模式,以字节为单位测量;对于ECI模式,为0; 始终为零或正数。不是数据的位长度。\n public readonly numChars: number,\n // 此段的数据位。通过getData()访问。\n readonly bitData: number[],\n ) {\n if (numChars < 0) throw new RangeError('Invalid argument');\n this.bitData = bitData.slice(); // 进行防御性拷贝\n }\n // 返回此段数据位的新副本。\n public getData(): number[] {\n return this.bitData.slice(); // 进行防御性拷贝\n }\n}\nconst NUMERIC_REGEX: RegExp = /^[0-9]*$/;\nconst ALPHANUMERIC_REGEX: RegExp = /^[A-Z0-9 $%*+./:-]*$/;\n// 字母数字模式中所有合法字符的集合,其中每个字符值映射到字符串中的索引。\nconst ALPHANUMERIC_CHARSET: string = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:';\n\n// 是否可以用数字模式编码。当且仅当每个字符都在0到9的范围内时,字符串可编码。\nfunction isNumeric(text: string): boolean {\n return NUMERIC_REGEX.test(text);\n}\n/**\n * 是否可以用字母数字模式编码\n * @description 0到9、A到Z仅大写)、空格、美元符号、百分号、星号、加号、连字符、句点、斜杠、冒号。\n * @param {String} text 给定字符串\n * @returns {Boolean} boolean\n */\nfunction isAlphanumeric(text: string): boolean {\n return ALPHANUMERIC_REGEX.test(text);\n}\n// 返回一个表示以字节模式编码的给定二进制数据的段。所有输入字节数组都是可接受的。任何文本字符串都可以转换为UTF-8字节并编码为字节模式段。\nfunction makeBytes(data: Readonly<number[]>): QrSegment {\n const bb: number[] = [];\n\n for (const b of data) appendBits(b, 8, bb);\n return new QrSegment(QrMode.get('BYTE'), data.length, bb);\n}\n// 计算并返回在给定版本下编码给定段所需的位数。如果某个段的字符数太多以至于无法适应其长度字段,则结果为无穷大。\nfunction getTotalBits(segs: Readonly<QrSegment[]>, version: number): number {\n let result: number = 0;\n\n for (const seg of segs) {\n const ccbits: number = seg.mode.numCharCountBits(version);\n\n if (seg.numChars >= 1 << ccbits) return Infinity; // 段的长度不适合字段的位宽度\n result += 4 + ccbits + seg.bitData.length;\n }\n return result;\n}\n// 返回一个表示以数字模式编码的给定十进制数字字符串的段。\nfunction makeNumeric(digits: string): QrSegment {\n if (!isNumeric(digits)) {\n throw new RangeError('String contains non-numeric characters');\n }\n const bb: number[] = [];\n\n for (let i = 0; i < digits.length; ) {\n // 每次迭代最多消耗3个数字\n const n: number = Math.min(digits.length - i, 3);\n\n appendBits(parseInt(digits.substring(i, i + n), 10), n * 3 + 1, bb);\n i += n;\n }\n return new QrSegment(QrMode.get('NUMERIC'), digits.length, bb);\n}\n// 返回一个表示以字母数字模式编码的给定文本字符串的段。允许的字符是:0到9、A到Z(仅大写)、空格、美元符号、百分号、星号、加号、连字符、句点、斜杠、冒号。\nfunction makeAlphanumeric(text: string): QrSegment {\n if (!isAlphanumeric(text)) {\n throw new RangeError('String contains unencodable characters in alphanumeric mode');\n }\n const bb: number[] = [];\n let i: number;\n\n for (i = 0; i + 2 <= text.length; i += 2) {\n // 处理每组2个字符\n let temp = ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)) * 45;\n\n temp += ALPHANUMERIC_CHARSET.indexOf(text.charAt(i + 1));\n appendBits(temp, 11, bb);\n }\n // 剩下1个字符\n if (i < text.length) {\n appendBits(ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)), 6, bb);\n }\n return new QrSegment(QrMode.get('ALPHANUMERIC'), text.length, bb);\n}\n/*\n * QR码符号中的错误纠正级别\n */\nexport class Ecc {\n private constructor(\n // 在0到3范围内(无符号2位整数)。\n public readonly ordinal: IntRange<0, 4>,\n // (包私有) 在0到3范围内(无符号2位整数)。\n public readonly formatBits: IntRange<0, 4>,\n ) {}\n private static readonly LEVELS = {\n LOW: new Ecc(0, 1), // 7% 错误容忍率\n MEDIUM: new Ecc(1, 0), // 15% 错误容忍率\n QUARTILE: new Ecc(2, 3), // 25% 错误容忍率\n HIGH: new Ecc(3, 2), // 30% 错误容忍率\n } as const;\n // 获取指定级别的 ECC\n public static get(level: keyof typeof Ecc.LEVELS): Ecc {\n return Ecc.LEVELS[level];\n }\n}\n/*\n * 描述如何解释段的数据位。不可变。\n */\nclass QrMode {\n private constructor(\n // 模式指示位,是一个uint4值(范围0到15)。\n public readonly modeBits: IntRange<0, 16>,\n // 三个不同版本范围的字符计数位数。\n private readonly numBitsCharCount: readonly [number, number, number],\n ) {}\n private static readonly modes = {\n NUMERIC: new QrMode(0x1, [10, 12, 14]),\n ALPHANUMERIC: new QrMode(0x2, [9, 11, 13]),\n BYTE: new QrMode(0x4, [8, 16, 16]),\n KANJI: new QrMode(0x8, [8, 10, 12]),\n ECI: new QrMode(0x7, [0, 0, 0]),\n } as const;\n public static get(mode: keyof typeof QrMode.modes) {\n return QrMode.modes[mode];\n }\n // 范围计算\n public numCharCountBits(version: number): number {\n return this.numBitsCharCount[Math.floor((version + 7) / 17)];\n }\n}\n\ntype Enumerate<N extends number, Acc extends number[] = []> = Acc['length'] extends N\n ? Acc[number]\n : Enumerate<N, [...Acc, Acc['length']]>;\n\nexport type IntRange<F extends number, T extends number> = Exclude<Enumerate<T>, Enumerate<F>>;\n"],"names":["ECC_CODEWORDS_PER_BLOCK","NUM_ERROR_CORRECTION_BLOCKS","getNumRawDataModules","ver","QrCode","VERSION","MIN","MAX","RangeError","result","numAlign","Math","floor","assert","getNumDataCodewords","ecl","ordinal","encodeSegments","segs","minVersion","maxVersion","mask","boostEcl","version","dataUsedBits","_ecl","dataCapacityBits","usedBits","getTotalBits","seg","ccbits","mode","numCharCountBits","numChars","Infinity","bitData","length","newEcl","Ecc","get","bb","b","appendBits","modeBits","getData","push","min","padByte","dataCodewords","forEach","i","makeSegments","text","NUMERIC_REGEX","test","makeNumeric","digits","n","parseInt","substring","QrSegment","QrMode","ALPHANUMERIC_REGEX","makeAlphanumeric","temp","ALPHANUMERIC_CHARSET","indexOf","charAt","makeBytes","data","toUtf8ByteArray","str","encodeURI","charCodeAt","reedSolomonMultiply","x","y","z","selectMask","msk","minPenalty","applyMask","drawFormatBits","penalty","getPenaltyScore","getModule","size","modules","drawFunctionPatterns","flag","setFunctionModule","drawFinderPattern","alignPatPos","getAlignmentPatternPositions","j","drawAlignmentPattern","drawVersion","errorCorrectionLevel","formatBits","rem","bits","getBit","color","a","dy","dx","dist","max","abs","xx","yy","isDark","isFunction","addEccAndInterleave","numBlocks","blockEccLen","rawCodewords","numShortBlocks","shortBlockLen","blocks","rsDiv","reedSolomonComputeDivisor","degree","root","k","dat","slice","ecc","reedSolomonComputeRemainder","divisor","map","factor","shift","coef","concat","block","drawCodewords","len","right","vert","maskPattern","MASK_PATTERNS","runColor","runX","runHistory","PENALTY","N1","finderPenaltyAddHistory","finderPenaltyCountPatterns","N3","finderPenaltyTerminateAndCount","runY","N2","dark","row","reduce","sum","total","ceil","N4","step","pos","splice","score","runLength","pop","unshift","_","Array","fill","allCodewords","val","cond","Error","level","LEVELS","LOW","MEDIUM","QUARTILE","HIGH","modes","numBitsCharCount","NUMERIC","ALPHANUMERIC","BYTE","KANJI","ECI"],"mappings":"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"}
|