ilx1-x-tool 1.1.1 → 1.2.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/README.md +107 -0
- package/dist/index.d.mts +265 -1
- package/dist/index.d.ts +265 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -2
package/dist/index.js
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
var p=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var T=(r,e)=>{for(var n in e)p(r,n,{get:e[n],enumerable:!0})},F=(r,e,n,d)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of M(e))!E.call(r,s)&&s!==n&&p(r,s,{get:()=>e[s],enumerable:!(d=S(e,s))||d.enumerable});return r};var A=r=>F(p({},"__esModule",{value:!0}),r);var Q={};T(Q,{Endianness:()=>w,asciiArrToNum:()=>J,bits16ToNum:()=>$,bytesToNum:()=>N,compressJsonGzip:()=>B,decompressJsonGzip:()=>C,errorResult:()=>G,getHIDCodeMapStr:()=>P,getHIDCodeMapStrNum:()=>L,hidKeyCode:()=>g,hslToHsv:()=>_,hslToRgb:()=>j,hsvToHsl:()=>W,isImageValid:()=>I,isShowPopover:()=>R,numToAsciiArr:()=>z,numToBits16:()=>U,numToBytes:()=>D,parseColorString:()=>V,rgbToHsl:()=>O,successResult:()=>H});module.exports=A(Q);var g=[{key:0,word:"a",dec:"4",hex:"04",kind:1,value:4,aliases:["A"]},{key:2,word:"b",dec:"5",hex:"05",kind:1,value:5,aliases:["B"]},{key:4,word:"c",dec:"6",hex:"06",kind:1,value:6,aliases:["C"]},{key:6,word:"d",dec:"7",hex:"07",kind:1,value:7,aliases:["D"]},{key:8,word:"e",dec:"8",hex:"08",kind:1,value:8,aliases:["E"]},{key:10,word:"f",dec:"9",hex:"09",kind:1,value:9,aliases:["F"]},{key:12,word:"g",dec:"10",hex:"0A",kind:1,value:10,aliases:["G"]},{key:14,word:"h",dec:"11",hex:"0B",kind:1,value:11,aliases:["H"]},{key:16,word:"i",dec:"12",hex:"0C",kind:1,value:12,aliases:["I"]},{key:18,word:"j",dec:"13",hex:"0D",kind:1,value:13,aliases:["J"]},{key:20,word:"k",dec:"14",hex:"0E",kind:1,value:14,aliases:["K"]},{key:22,word:"l",dec:"15",hex:"0F",kind:1,value:15,aliases:["L"]},{key:24,word:"m",dec:"16",hex:"10",kind:1,value:16,aliases:["M"]},{key:26,word:"n",dec:"17",hex:"11",kind:1,value:17,aliases:["N"]},{key:28,word:"o",dec:"18",hex:"12",kind:1,value:18,aliases:["O"]},{key:30,word:"p",dec:"19",hex:"13",kind:1,value:19,aliases:["P"]},{key:32,word:"q",dec:"20",hex:"14",kind:1,value:20,aliases:["Q"]},{key:34,word:"r",dec:"21",hex:"15",kind:1,value:21,aliases:["R"]},{key:36,word:"s",dec:"22",hex:"16",kind:1,value:22,aliases:["S"]},{key:38,word:"t",dec:"23",hex:"17",kind:1,value:23,aliases:["T"]},{key:40,word:"u",dec:"24",hex:"18",kind:1,value:24,aliases:["U"]},{key:42,word:"v",dec:"25",hex:"19",kind:1,value:25,aliases:["V"]},{key:44,word:"w",dec:"26",hex:"1A",kind:1,value:26,aliases:["W"]},{key:46,word:"x",dec:"27",hex:"1B",kind:1,value:27,aliases:["X"]},{key:48,word:"y",dec:"28",hex:"1C",kind:1,value:28,aliases:["Y"]},{key:50,word:"z",dec:"29",hex:"1D",kind:1,value:29,aliases:["Z"]},{key:52,word:"1",dec:"30",hex:"1E",kind:1,value:30,aliases:["!","1!"]},{key:54,word:"2",dec:"31",hex:"1F",kind:1,value:31,aliases:["@","2@"]},{key:56,word:"3",dec:"32",hex:"20",kind:1,value:32,aliases:["#","3#"]},{key:58,word:"4",dec:"33",hex:"21",kind:1,value:33,aliases:["$","4$"]},{key:60,word:"5",dec:"34",hex:"22",kind:1,value:34,aliases:["%","5%"]},{key:62,word:"6",dec:"35",hex:"23",kind:1,value:35,aliases:["^","6^"]},{key:64,word:"7",dec:"36",hex:"24",kind:1,value:36,aliases:["&","7&"]},{key:66,word:"8",dec:"37",hex:"25",kind:1,value:37,aliases:["*","8*"]},{key:68,word:"9",dec:"38",hex:"26",kind:1,value:38,aliases:["(","9("]},{key:70,word:"0",dec:"39",hex:"27",kind:1,value:39,aliases:[")","0)"]},{key:77,word:"-",dec:"45",hex:"2D",kind:1,value:45,aliases:["_","-_"]},{key:79,word:"=",dec:"46",hex:"2E",kind:1,value:46,aliases:["+","=+"]},{key:81,word:"[",dec:"47",hex:"2F",kind:1,value:47,aliases:["{","[{"]},{key:83,word:"]",dec:"48",hex:"30",kind:1,value:48,aliases:["}","}]"]},{key:85,word:"\\",dec:"49",hex:"31",kind:1,value:49,aliases:["|","\\|"]},{key:87,word:"`",dec:"50",hex:"32",kind:1,value:50,aliases:["~","`~"]},{key:89,word:";",dec:"51",hex:"33",kind:1,value:51,aliases:[":",";:"]},{key:91,word:"'",dec:"52",hex:"34",kind:1,value:52,aliases:['"',`'"`]},{key:95,word:",",dec:"54",hex:"36",kind:1,value:54,aliases:["<",",<"]},{key:97,word:".",dec:"55",hex:"37",kind:1,value:55,aliases:[">",".>"]},{key:99,word:"/",dec:"56",hex:"38",kind:1,value:56,aliases:["?","/?"]},{key:72,word:"Enter",dec:"40",hex:"28",kind:1,value:40},{key:73,word:"Escape",dec:"41",hex:"29",kind:1,value:41},{key:74,word:"Backspace",dec:"42",hex:"2A",kind:1,value:42},{key:75,word:"Tab",dec:"43",hex:"2B",kind:1,value:43},{key:76,word:" ",dec:"44",hex:"2C",kind:1,value:44},{key:101,word:"CapsLock",dec:"57",hex:"39",kind:1,value:57},{key:102,word:"F1",dec:"58",hex:"3A",kind:1,value:58},{key:103,word:"F2",dec:"59",hex:"3B",kind:1,value:59},{key:104,word:"F3",dec:"60",hex:"3C",kind:1,value:60},{key:105,word:"F4",dec:"61",hex:"3D",kind:1,value:61},{key:106,word:"F5",dec:"62",hex:"3E",kind:1,value:62},{key:107,word:"F6",dec:"63",hex:"3F",kind:1,value:63},{key:108,word:"F7",dec:"64",hex:"40",kind:1,value:64},{key:109,word:"F8",dec:"65",hex:"41",kind:1,value:65},{key:110,word:"F9",dec:"66",hex:"42",kind:1,value:66},{key:111,word:"F10",dec:"67",hex:"43",kind:1,value:67},{key:112,word:"F11",dec:"68",hex:"44",kind:1,value:68},{key:113,word:"F12",dec:"69",hex:"45",kind:1,value:69},{key:114,word:"PrintScreen",dec:"70",hex:"46",kind:1,value:70},{key:115,word:"ScrollLock",dec:"71",hex:"47",kind:1,value:71},{key:116,word:"Pause",dec:"72",hex:"48",kind:1,value:72},{key:117,word:"Insert",dec:"73",hex:"49",kind:1,value:73},{key:118,word:"Home",dec:"74",hex:"4A",kind:1,value:74},{key:119,word:"PageUp",dec:"75",hex:"4B",kind:1,value:75},{key:120,word:"DeleteForward",dec:"76",hex:"4C",kind:1,value:76},{key:121,word:"End",dec:"77",hex:"4D",kind:1,value:77},{key:122,word:"PageDown",dec:"78",hex:"4E",kind:1,value:78},{key:123,word:"ArrowRight",dec:"79",hex:"4F",kind:1,value:79},{key:124,word:"ArrowLeft",dec:"80",hex:"50",kind:1,value:80},{key:125,word:"ArrowDown",dec:"81",hex:"51",kind:1,value:81},{key:126,word:"ArrowUp",dec:"82",hex:"52",kind:1,value:82},{key:127,word:"NumLock",dec:"83",hex:"53",kind:1,value:83},{key:128,word:"Clear",dec:"83",hex:"53",kind:1,value:83},{key:160,word:"F13",dec:"104",hex:"68",kind:0,value:104},{key:161,word:"F14",dec:"105",hex:"69",kind:0,value:105},{key:162,word:"F15",dec:"106",hex:"6A",kind:0,value:106},{key:163,word:"F16",dec:"107",hex:"6B",kind:0,value:107},{key:164,word:"LeftControl",dec:"224",hex:"E0",kind:0,value:224},{key:165,word:"LeftShift",dec:"225",hex:"E1",kind:0,value:225},{key:166,word:"LeftAlt",dec:"226",hex:"E2",kind:0,value:226},{key:167,word:"LeftGUI",dec:"227",hex:"E3",kind:0,value:227},{key:168,word:"RightControl",dec:"228",hex:"E4",kind:0,value:228},{key:169,word:"RightShift",dec:"229",hex:"E5",kind:0,value:229},{key:170,word:"RightAlt",dec:"230",hex:"E6",kind:0,value:230},{key:171,word:"RightGUI",dec:"231",hex:"E7",kind:0,value:231}],P=()=>g.reduce((r,e)=>(r.set(e.word,e),e.aliases&&e.aliases.length>0&&e.aliases.forEach(n=>{r.set(n,e)}),r),new Map),L=()=>g.reduce((r,e)=>r.set(e.value,e),new Map);var m=require("fflate"),B=r=>{let e=JSON.stringify(r),n=new TextEncoder().encode(e),d=new Uint8Array((0,m.gzipSync)(n));return new Blob([d],{type:"application/gzip"})},C=async r=>{let e=await r.arrayBuffer(),n=(0,m.gunzipSync)(new Uint8Array(e)),d=new TextDecoder().decode(n);return JSON.parse(d)};function R(r){let e=document.getElementById(r);return e&&window.getComputedStyle(e).display!=="none"&&e.getAttribute("aria-hidden")!=="true"}function I(r){return new Promise(e=>{let n=new Image;n.src=typeof r=="string"?r:URL.createObjectURL(r),n.onload=()=>e(!0),n.onerror=()=>e(!1)})}function H(r=null,e="",n=0){return{success:!0,code:n,message:e,data:r}}function G(r,e=-1,n=null){return{success:!1,code:e,message:r,data:n}}var w={LITTLE:"little",BIG:"big"},D=(r,e,n=w.BIG)=>{if(!Number.isInteger(e)||e<=0)throw new Error("Byte count must be a positive integer.");let d=r>>>0,s=new Array(e);for(let a=0;a<e;a++){let o=n===w.LITTLE?a*8:(e-1-a)*8;s[a]=d>>o&255}return s},N=(r,e=w.BIG)=>{let n=0;if(e===w.LITTLE)for(let d=0;d<r.length;d++)n|=(r[d]&255)<<d*8;else for(let d=0;d<r.length;d++)n|=(r[d]&255)<<(r.length-1-d)*8;return n},U=(r,e=w.BIG)=>{let n=r&65535;return e===w.LITTLE?[n&255,n>>8&255]:[n>>8&255,n&255]},$=(r,e=w.BIG)=>{if(r.length!==2)throw new Error("Input array must have exactly 2 elements");return e===w.LITTLE?r[1]<<8|r[0]:r[0]<<8|r[1]},z=r=>Math.abs(r).toString().split("").map(e=>e.charCodeAt(0)),J=r=>Number(String.fromCharCode(...r));var i=(r,e,n)=>Math.min(Math.max(r,e),n);function V(r){let e=t=>{let u=t.endsWith("%"),c=parseFloat(t.replace("%",""));return u?Math.round(i(c/100,0,1)*255):i(Math.round(c),0,255)},n=t=>{let u=t.endsWith("%"),c=parseFloat(t.replace("%",""));return i(u?c/100:c,0,1)},d=t=>{if(!t.endsWith("%"))return 0;let u=parseFloat(t.replace("%",""));return i(u/100,0,1)},s=/^rgb\(\s*(\d+(\.\d+)?%?)\s*,\s*(\d+(\.\d+)?%?)\s*,\s*(\d+(\.\d+)?%?)\s*\)$/i,a=r.match(s);if(a){let[,t,,u,,c]=a;return{type:"rgb",r:e(t),g:e(u),b:e(c)}}let o=/^rgba\(\s*(\d+(\.\d+)?%?)\s*,\s*(\d+(\.\d+)?%?)\s*,\s*(\d+(\.\d+)?%?)\s*,\s*(\d+(\.\d+)?%?)\s*\)$/i,h=r.match(o);if(h){let[,t,,u,,c,,f]=h;return{type:"rgba",r:e(t),g:e(u),b:e(c),a:n(f)}}let x=/^hsv\(\s*(\d+(\.\d+)?)\s*,\s*(\d+(\.\d+)?%)\s*,\s*(\d+(\.\d+)?%)\s*\)$/i,l=r.match(x);if(l){let[,t,,u,,c]=l;return{type:"hsv",h:i(parseFloat(t),0,360),s:d(u),v:d(c)}}let y=/^hsl\(\s*(\d+(\.\d+)?)\s*,\s*(\d+(\.\d+)?%)\s*,\s*(\d+(\.\d+)?%)\s*\)$/i,v=r.match(y);if(v){let[,t,,u,,c]=v;return{type:"hsl",h:i(parseFloat(t),0,360),s:d(u),l:d(c)}}let k=/^hsla\(\s*(\d+(\.\d+)?)\s*,\s*(\d+(\.\d+)?%)\s*,\s*(\d+(\.\d+)?%)\s*,\s*(\d+(\.\d+)?%?)\s*\)$/i,b=r.match(k);if(b){let[,t,,u,,c,,f]=b;return{type:"hsla",h:i(parseFloat(t),0,360),s:d(u),l:d(c),a:n(f)}}return null}function j(r){let e=i(r.h,0,360)/360,n=i(r.s,0,1),d=i(r.l,0,1),s=0,a=0,o=0;if(n===0)s=a=o=d;else{let h=(y,v,k)=>(k<0&&(k+=1),k>1&&(k-=1),k<.16666666666666666?y+(v-y)*6*k:k<.5?v:k<.6666666666666666?y+(v-y)*(.6666666666666666-k)*6:y),x=d<.5?d*(1+n):d+n-d*n,l=2*d-x;s=h(l,x,e+1/3),a=h(l,x,e),o=h(l,x,e-1/3)}return{type:"rgb",r:Math.round(s*255),g:Math.round(a*255),b:Math.round(o*255)}}function O(r){let e=i(r.r,0,255)/255,n=i(r.g,0,255)/255,d=i(r.b,0,255)/255,s=Math.max(e,n,d),a=Math.min(e,n,d),o=s-a,h=(s+a)/2,x=0;o!==0&&(x=o/(1-Math.abs(2*h-1)));let l=0;if(o!==0){switch(s){case e:l=(n-d)/o%6;break;case n:l=(d-e)/o+2;break;case d:l=(e-n)/o+4;break}l=Math.round(l*60),l<0&&(l+=360)}return{type:"hsl",h:i(l,0,360),s:i(x,0,1),l:i(h,0,1)}}function W(r){let{h:e,s:n,v:d}=r,s;n===0?s=d:s=(2-n)*d/2,s=Math.max(0,Math.min(1,s));let a;return s===0||s===1?a=0:(a=n*d/(1-Math.abs(2*s-1)),a=Math.max(0,Math.min(1,a))),{type:"hsl",h:Math.max(0,Math.min(360,e)),s:a,l:s}}function _(r){let{h:e,s:n,l:d}=r,s=d+n*Math.min(d,1-d),a=Math.max(0,Math.min(1,s)),o;return a===0?o=0:(o=2*(1-d/a),o=Math.max(0,Math.min(1,o))),{type:"hsv",h:Math.max(0,Math.min(360,e)),s:o,v:a}}0&&(module.exports={Endianness,asciiArrToNum,bits16ToNum,bytesToNum,compressJsonGzip,decompressJsonGzip,errorResult,getHIDCodeMapStr,getHIDCodeMapStrNum,hidKeyCode,hslToHsv,hslToRgb,hsvToHsl,isImageValid,isShowPopover,numToAsciiArr,numToBits16,numToBytes,parseColorString,rgbToHsl,successResult});
|
|
1
|
+
var D=Object.create;var S=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var U=(e,n)=>{for(var t in n)S(e,t,{get:n[t],enumerable:!0})},A=(e,n,t,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of L(n))!F.call(e,o)&&o!==t&&S(e,o,{get:()=>n[o],enumerable:!(r=R(n,o))||r.enumerable});return e};var H=(e,n,t)=>(t=e!=null?D(P(e)):{},A(n||!e||!e.__esModule?S(t,"default",{value:e,enumerable:!0}):t,e)),O=e=>A(S({},"__esModule",{value:!0}),e);var Re={};U(Re,{Endianness:()=>w,ImageSamplingCol:()=>pe,ImageSamplingColRow:()=>ye,ImageSamplingRow:()=>xe,ImageSamplingRowCol:()=>ke,ImageToHexArray:()=>l,arrayToHex:()=>Se,asciiArrToNum:()=>X,base64ToImageData:()=>we,bits16ToNum:()=>Q,bytesToNum:()=>J,calculateOutputSize:()=>Ae,colorImageSampling:()=>fe,compressJsonGzip:()=>G,createImageData:()=>Ee,debug:()=>le,decompressJsonGzip:()=>_,disableAllLogs:()=>me,enableAllLogs:()=>ue,error:()=>de,errorResult:()=>W,formatHexOutput:()=>Me,generate:()=>ge,generatePreview:()=>Ce,getDefaultConfig:()=>De,getHIDCodeMapStr:()=>N,getHIDCodeMapStrNum:()=>B,getSamplingModeDescription:()=>Te,hex2hex:()=>Ie,hidKeyCode:()=>E,hslToHsv:()=>te,hslToRgb:()=>Z,hsvToHsl:()=>ne,imageDataToHexArray:()=>he,info:()=>se,isImageValid:()=>z,isShowPopover:()=>V,log:()=>ae,numToAsciiArr:()=>q,numToBits16:()=>K,numToBytes:()=>j,parseColorString:()=>Y,resetLoggerConfig:()=>ce,resizeImageWithCanvas:()=>ve,resizeImageWithKonva:()=>be,rgbToHsl:()=>ee,setLoggerConfig:()=>M,successResult:()=>$,warn:()=>ie});module.exports=O(Re);var E=[{key:0,word:"a",dec:"4",hex:"04",kind:1,value:4,aliases:["A"]},{key:2,word:"b",dec:"5",hex:"05",kind:1,value:5,aliases:["B"]},{key:4,word:"c",dec:"6",hex:"06",kind:1,value:6,aliases:["C"]},{key:6,word:"d",dec:"7",hex:"07",kind:1,value:7,aliases:["D"]},{key:8,word:"e",dec:"8",hex:"08",kind:1,value:8,aliases:["E"]},{key:10,word:"f",dec:"9",hex:"09",kind:1,value:9,aliases:["F"]},{key:12,word:"g",dec:"10",hex:"0A",kind:1,value:10,aliases:["G"]},{key:14,word:"h",dec:"11",hex:"0B",kind:1,value:11,aliases:["H"]},{key:16,word:"i",dec:"12",hex:"0C",kind:1,value:12,aliases:["I"]},{key:18,word:"j",dec:"13",hex:"0D",kind:1,value:13,aliases:["J"]},{key:20,word:"k",dec:"14",hex:"0E",kind:1,value:14,aliases:["K"]},{key:22,word:"l",dec:"15",hex:"0F",kind:1,value:15,aliases:["L"]},{key:24,word:"m",dec:"16",hex:"10",kind:1,value:16,aliases:["M"]},{key:26,word:"n",dec:"17",hex:"11",kind:1,value:17,aliases:["N"]},{key:28,word:"o",dec:"18",hex:"12",kind:1,value:18,aliases:["O"]},{key:30,word:"p",dec:"19",hex:"13",kind:1,value:19,aliases:["P"]},{key:32,word:"q",dec:"20",hex:"14",kind:1,value:20,aliases:["Q"]},{key:34,word:"r",dec:"21",hex:"15",kind:1,value:21,aliases:["R"]},{key:36,word:"s",dec:"22",hex:"16",kind:1,value:22,aliases:["S"]},{key:38,word:"t",dec:"23",hex:"17",kind:1,value:23,aliases:["T"]},{key:40,word:"u",dec:"24",hex:"18",kind:1,value:24,aliases:["U"]},{key:42,word:"v",dec:"25",hex:"19",kind:1,value:25,aliases:["V"]},{key:44,word:"w",dec:"26",hex:"1A",kind:1,value:26,aliases:["W"]},{key:46,word:"x",dec:"27",hex:"1B",kind:1,value:27,aliases:["X"]},{key:48,word:"y",dec:"28",hex:"1C",kind:1,value:28,aliases:["Y"]},{key:50,word:"z",dec:"29",hex:"1D",kind:1,value:29,aliases:["Z"]},{key:52,word:"1",dec:"30",hex:"1E",kind:1,value:30,aliases:["!","1!"]},{key:54,word:"2",dec:"31",hex:"1F",kind:1,value:31,aliases:["@","2@"]},{key:56,word:"3",dec:"32",hex:"20",kind:1,value:32,aliases:["#","3#"]},{key:58,word:"4",dec:"33",hex:"21",kind:1,value:33,aliases:["$","4$"]},{key:60,word:"5",dec:"34",hex:"22",kind:1,value:34,aliases:["%","5%"]},{key:62,word:"6",dec:"35",hex:"23",kind:1,value:35,aliases:["^","6^"]},{key:64,word:"7",dec:"36",hex:"24",kind:1,value:36,aliases:["&","7&"]},{key:66,word:"8",dec:"37",hex:"25",kind:1,value:37,aliases:["*","8*"]},{key:68,word:"9",dec:"38",hex:"26",kind:1,value:38,aliases:["(","9("]},{key:70,word:"0",dec:"39",hex:"27",kind:1,value:39,aliases:[")","0)"]},{key:77,word:"-",dec:"45",hex:"2D",kind:1,value:45,aliases:["_","-_"]},{key:79,word:"=",dec:"46",hex:"2E",kind:1,value:46,aliases:["+","=+"]},{key:81,word:"[",dec:"47",hex:"2F",kind:1,value:47,aliases:["{","[{"]},{key:83,word:"]",dec:"48",hex:"30",kind:1,value:48,aliases:["}","}]"]},{key:85,word:"\\",dec:"49",hex:"31",kind:1,value:49,aliases:["|","\\|"]},{key:87,word:"`",dec:"50",hex:"32",kind:1,value:50,aliases:["~","`~"]},{key:89,word:";",dec:"51",hex:"33",kind:1,value:51,aliases:[":",";:"]},{key:91,word:"'",dec:"52",hex:"34",kind:1,value:52,aliases:['"',`'"`]},{key:95,word:",",dec:"54",hex:"36",kind:1,value:54,aliases:["<",",<"]},{key:97,word:".",dec:"55",hex:"37",kind:1,value:55,aliases:[">",".>"]},{key:99,word:"/",dec:"56",hex:"38",kind:1,value:56,aliases:["?","/?"]},{key:72,word:"Enter",dec:"40",hex:"28",kind:1,value:40},{key:73,word:"Escape",dec:"41",hex:"29",kind:1,value:41},{key:74,word:"Backspace",dec:"42",hex:"2A",kind:1,value:42},{key:75,word:"Tab",dec:"43",hex:"2B",kind:1,value:43},{key:76,word:" ",dec:"44",hex:"2C",kind:1,value:44},{key:101,word:"CapsLock",dec:"57",hex:"39",kind:1,value:57},{key:102,word:"F1",dec:"58",hex:"3A",kind:1,value:58},{key:103,word:"F2",dec:"59",hex:"3B",kind:1,value:59},{key:104,word:"F3",dec:"60",hex:"3C",kind:1,value:60},{key:105,word:"F4",dec:"61",hex:"3D",kind:1,value:61},{key:106,word:"F5",dec:"62",hex:"3E",kind:1,value:62},{key:107,word:"F6",dec:"63",hex:"3F",kind:1,value:63},{key:108,word:"F7",dec:"64",hex:"40",kind:1,value:64},{key:109,word:"F8",dec:"65",hex:"41",kind:1,value:65},{key:110,word:"F9",dec:"66",hex:"42",kind:1,value:66},{key:111,word:"F10",dec:"67",hex:"43",kind:1,value:67},{key:112,word:"F11",dec:"68",hex:"44",kind:1,value:68},{key:113,word:"F12",dec:"69",hex:"45",kind:1,value:69},{key:114,word:"PrintScreen",dec:"70",hex:"46",kind:1,value:70},{key:115,word:"ScrollLock",dec:"71",hex:"47",kind:1,value:71},{key:116,word:"Pause",dec:"72",hex:"48",kind:1,value:72},{key:117,word:"Insert",dec:"73",hex:"49",kind:1,value:73},{key:118,word:"Home",dec:"74",hex:"4A",kind:1,value:74},{key:119,word:"PageUp",dec:"75",hex:"4B",kind:1,value:75},{key:120,word:"DeleteForward",dec:"76",hex:"4C",kind:1,value:76},{key:121,word:"End",dec:"77",hex:"4D",kind:1,value:77},{key:122,word:"PageDown",dec:"78",hex:"4E",kind:1,value:78},{key:123,word:"ArrowRight",dec:"79",hex:"4F",kind:1,value:79},{key:124,word:"ArrowLeft",dec:"80",hex:"50",kind:1,value:80},{key:125,word:"ArrowDown",dec:"81",hex:"51",kind:1,value:81},{key:126,word:"ArrowUp",dec:"82",hex:"52",kind:1,value:82},{key:127,word:"NumLock",dec:"83",hex:"53",kind:1,value:83},{key:128,word:"Clear",dec:"83",hex:"53",kind:1,value:83},{key:160,word:"F13",dec:"104",hex:"68",kind:0,value:104},{key:161,word:"F14",dec:"105",hex:"69",kind:0,value:105},{key:162,word:"F15",dec:"106",hex:"6A",kind:0,value:106},{key:163,word:"F16",dec:"107",hex:"6B",kind:0,value:107},{key:164,word:"LeftControl",dec:"224",hex:"E0",kind:0,value:224},{key:165,word:"LeftShift",dec:"225",hex:"E1",kind:0,value:225},{key:166,word:"LeftAlt",dec:"226",hex:"E2",kind:0,value:226},{key:167,word:"LeftGUI",dec:"227",hex:"E3",kind:0,value:227},{key:168,word:"RightControl",dec:"228",hex:"E4",kind:0,value:228},{key:169,word:"RightShift",dec:"229",hex:"E5",kind:0,value:229},{key:170,word:"RightAlt",dec:"230",hex:"E6",kind:0,value:230},{key:171,word:"RightGUI",dec:"231",hex:"E7",kind:0,value:231}],N=()=>E.reduce((e,n)=>(e.set(n.word,n),n.aliases&&n.aliases.length>0&&n.aliases.forEach(t=>{e.set(t,n)}),e),new Map),B=()=>E.reduce((e,n)=>e.set(n.value,n),new Map);var I=require("fflate"),G=e=>{let n=JSON.stringify(e),t=new TextEncoder().encode(n),r=new Uint8Array((0,I.gzipSync)(t));return new Blob([r],{type:"application/gzip"})},_=async e=>{let n=await e.arrayBuffer(),t=(0,I.gunzipSync)(new Uint8Array(n)),r=new TextDecoder().decode(t);return JSON.parse(r)};function V(e){let n=document.getElementById(e);return n&&window.getComputedStyle(n).display!=="none"&&n.getAttribute("aria-hidden")!=="true"}function z(e){return new Promise(n=>{let t=new Image;t.src=typeof e=="string"?e:URL.createObjectURL(e),t.onload=()=>n(!0),t.onerror=()=>n(!1)})}function $(e=null,n="",t=0){return{success:!0,code:t,message:n,data:e}}function W(e,n=-1,t=null){return{success:!1,code:n,message:e,data:t}}var w={LITTLE:"little",BIG:"big"},j=(e,n,t=w.BIG)=>{if(!Number.isInteger(n)||n<=0)throw new Error("Byte count must be a positive integer.");let r=e>>>0,o=new Array(n);for(let a=0;a<n;a++){let s=t===w.LITTLE?a*8:(n-1-a)*8;o[a]=r>>s&255}return o},J=(e,n=w.BIG)=>{let t=0;if(n===w.LITTLE)for(let r=0;r<e.length;r++)t|=(e[r]&255)<<r*8;else for(let r=0;r<e.length;r++)t|=(e[r]&255)<<(e.length-1-r)*8;return t},K=(e,n=w.BIG)=>{let t=e&65535;return n===w.LITTLE?[t&255,t>>8&255]:[t>>8&255,t&255]},Q=(e,n=w.BIG)=>{if(e.length!==2)throw new Error("Input array must have exactly 2 elements");return n===w.LITTLE?e[1]<<8|e[0]:e[0]<<8|e[1]},q=e=>Math.abs(e).toString().split("").map(n=>n.charCodeAt(0)),X=e=>Number(String.fromCharCode(...e));var x=(e,n,t)=>Math.min(Math.max(e,n),t);function Y(e){let n=f=>{let p=f.endsWith("%"),y=parseFloat(f.replace("%",""));return p?Math.round(x(y/100,0,1)*255):x(Math.round(y),0,255)},t=f=>{let p=f.endsWith("%"),y=parseFloat(f.replace("%",""));return x(p?y/100:y,0,1)},r=f=>{if(!f.endsWith("%"))return 0;let p=parseFloat(f.replace("%",""));return x(p/100,0,1)},o=/^rgb\(\s*(\d+(\.\d+)?%?)\s*,\s*(\d+(\.\d+)?%?)\s*,\s*(\d+(\.\d+)?%?)\s*\)$/i,a=e.match(o);if(a){let[,f,,p,,y]=a;return{type:"rgb",r:n(f),g:n(p),b:n(y)}}let s=/^rgba\(\s*(\d+(\.\d+)?%?)\s*,\s*(\d+(\.\d+)?%?)\s*,\s*(\d+(\.\d+)?%?)\s*,\s*(\d+(\.\d+)?%?)\s*\)$/i,u=e.match(s);if(u){let[,f,,p,,y,,C]=u;return{type:"rgba",r:n(f),g:n(p),b:n(y),a:t(C)}}let m=/^hsv\(\s*(\d+(\.\d+)?)\s*,\s*(\d+(\.\d+)?%)\s*,\s*(\d+(\.\d+)?%)\s*\)$/i,i=e.match(m);if(i){let[,f,,p,,y]=i;return{type:"hsv",h:x(parseFloat(f),0,360),s:r(p),v:r(y)}}let d=/^hsl\(\s*(\d+(\.\d+)?)\s*,\s*(\d+(\.\d+)?%)\s*,\s*(\d+(\.\d+)?%)\s*\)$/i,c=e.match(d);if(c){let[,f,,p,,y]=c;return{type:"hsl",h:x(parseFloat(f),0,360),s:r(p),l:r(y)}}let g=/^hsla\(\s*(\d+(\.\d+)?)\s*,\s*(\d+(\.\d+)?%)\s*,\s*(\d+(\.\d+)?%)\s*,\s*(\d+(\.\d+)?%?)\s*\)$/i,h=e.match(g);if(h){let[,f,,p,,y,,C]=h;return{type:"hsla",h:x(parseFloat(f),0,360),s:r(p),l:r(y),a:t(C)}}return null}function Z(e){let n=x(e.h,0,360)/360,t=x(e.s,0,1),r=x(e.l,0,1),o=0,a=0,s=0;if(t===0)o=a=s=r;else{let u=(d,c,g)=>(g<0&&(g+=1),g>1&&(g-=1),g<.16666666666666666?d+(c-d)*6*g:g<.5?c:g<.6666666666666666?d+(c-d)*(.6666666666666666-g)*6:d),m=r<.5?r*(1+t):r+t-r*t,i=2*r-m;o=u(i,m,n+1/3),a=u(i,m,n),s=u(i,m,n-1/3)}return{type:"rgb",r:Math.round(o*255),g:Math.round(a*255),b:Math.round(s*255)}}function ee(e){let n=x(e.r,0,255)/255,t=x(e.g,0,255)/255,r=x(e.b,0,255)/255,o=Math.max(n,t,r),a=Math.min(n,t,r),s=o-a,u=(o+a)/2,m=0;s!==0&&(m=s/(1-Math.abs(2*u-1)));let i=0;if(s!==0){switch(o){case n:i=(t-r)/s%6;break;case t:i=(r-n)/s+2;break;case r:i=(n-t)/s+4;break}i=Math.round(i*60),i<0&&(i+=360)}return{type:"hsl",h:x(i,0,360),s:x(m,0,1),l:x(u,0,1)}}function ne(e){let{h:n,s:t,v:r}=e,o;t===0?o=r:o=(2-t)*r/2,o=Math.max(0,Math.min(1,o));let a;return o===0||o===1?a=0:(a=t*r/(1-Math.abs(2*o-1)),a=Math.max(0,Math.min(1,a))),{type:"hsl",h:Math.max(0,Math.min(360,n)),s:a,l:o}}function te(e){let{h:n,s:t,l:r}=e,o=r+t*Math.min(r,1-r),a=Math.max(0,Math.min(1,o)),s;return a===0?s=0:(s=2*(1-r/a),s=Math.max(0,Math.min(1,s))),{type:"hsv",h:Math.max(0,Math.min(360,n)),s,v:a}}var re=typeof window<"u",oe=()=>typeof process<"u"&&process.env?.NODE_ENV?process.env.NODE_ENV==="development":re&&window.__ENV__?.MODE?window.__ENV__.MODE==="development":!0,T={enable:oe(),reserveTypes:["error"],prefix:"[iLx1-tool]"},k={...T},v=e=>k.enable?!0:k.reserveTypes.includes(e),ae=(...e)=>{v("log")&&console.log(`${k.prefix} [LOG]`,...e)},se=(...e)=>{v("info")&&console.info(`${k.prefix} [INFO]`,...e)},ie=(...e)=>{v("warn")&&console.warn(`${k.prefix} [WARN]`,...e)},de=(...e)=>{v("error")&&console.error(`${k.prefix} [ERROR]`,...e)},le=(...e)=>{v("debug")&&console.debug(`${k.prefix} [DEBUG]`,...e)},M=e=>{k={...k,...e}},ce=()=>{k={...T}},ue=()=>{M({enable:!0,reserveTypes:["log","info","warn","error","debug"]})},me=()=>{M({enable:!1,reserveTypes:[]})};var b=H(require("konva")),l={generate:async function(e,n,t){try{let r=await this.base64ToImageData(e),o=this.imageDataToHexArray(r,n,t);return t[3]===0?this.hex2hex(this.arrayToHex(o)):o}catch(r){throw console.error("\u751F\u6210\u5341\u516D\u8FDB\u5236\u6570\u7EC4\u65F6\u51FA\u9519:",r),r}},imageDataToHexArray:function(e,n,t){let r=e.data,o=e.height,a=e.width,s=r.length;if(t[4]==1){let u=[];for(let c=0;c<s;c+=4){let h=r[c]*.299+r[c+1]*.587+r[c+2]*.114>n?1:0;u[c/4]=h}let i=t[1],d;switch(i){case 0:d=this.ImageSamplingRow;break;case 1:d=this.ImageSamplingCol;break;case 2:d=this.ImageSamplingColRow;break;case 3:d=this.ImageSamplingRowCol;break;default:d=this.ImageSamplingRow}if(typeof d!="function")throw new Error(`\u53D6\u6A21\u51FD\u6570\u672A\u5B9A\u4E49\uFF0CsamplingMode: ${i}`);return d.call(this,u,a,o,t)}else return this.colorImageSampling(r,a,o,t)},colorImageSampling:function(e,n,t,r){let o=new Uint8Array(n*t*2),a=0,s=0;for(;a<o.length&&s<e.length;){let u=e[s],m=e[s+1],i=e[s+2],d=u>>3&31,c=m>>2&63,g=i>>3&31,h=d<<11|c<<5|g;o[a]=h>>8&255,o[a+1]=h&255,(r[0]==0||r[2]==1)&&(o[a]=~o[a]&255,o[a+1]=~o[a+1]&255),a+=2,s+=4}return o},ImageSamplingRow:function(e,n,t,r){let o=Math.ceil(n/8),a=new Uint8Array(o*t);for(let s=0;s<e.length;s++){let u=s%n,i=Math.floor(s/n),d=u%8,c=1<<d;r[2]!=0&&(c=1<<7-d);let g=i*o+Math.floor(u/8),h=e[s];r[0]!==0&&(h=h===0?1:0),h===0?a[g]|=c:a[g]&=~c}return a},ImageSamplingCol:function(e,n,t,r){let o=Math.ceil(t/8),a=new Uint8Array(o*n);for(let s=0;s<e.length;s++){let u=s%n,m=Math.floor(s/n),i=u,d=m%8,c=1<<d;r[2]!=0&&(c=1<<7-d);let g=i*o+Math.floor(m/8),h=e[s];r[0]!==0&&(h=h===0?1:0),h===0?a[g]|=c:a[g]&=~c}return a},ImageSamplingColRow:function(e,n,t,r){let o=Math.ceil(t/8),a=new Uint8Array(o*n);for(let s=0;s<e.length;s++){let u=s%n,m=Math.floor(s/n),i=Math.floor(m/8),d=m%8,c=1<<d;r[2]!=0&&(c=1<<7-d);let g=u+i*n,h=e[s];r[0]!==0&&(h=h===0?1:0),h===0?a[g]|=c:a[g]&=~c}return a},ImageSamplingRowCol:function(e,n,t,r){let o=Math.ceil(n/8),a=new Uint8Array(o*t);for(let s=0;s<e.length;s++){let u=s%n,m=Math.floor(s/n),i=Math.floor(u/8),d=u%8,c=1<<d;r[2]!=0&&(c=1<<7-d);let g=i*t+m,h=e[s];r[0]!==0&&(h=h===0?1:0),h===0?a[g]|=c:a[g]&=~c}return a},base64ToImageData:function(e){return new Promise((n,t)=>{let r=new Image;r.crossOrigin="anonymous",r.src=e,r.onload=()=>{try{let o=document.createElement("canvas");o.width=r.width,o.height=r.height;let a=o.getContext("2d");a.drawImage(r,0,0);let s=a.getImageData(0,0,o.width,o.height);n(s)}catch(o){t(new Error(`\u8F6C\u6362\u56FE\u50CF\u6570\u636E\u5931\u8D25: ${o.message}`))}},r.onerror=()=>{t(new Error("\u52A0\u8F7D\u56FE\u50CF\u5931\u8D25"))},r.src=e})},resizeImageWithKonva:async function(e,n,t,r){if(e===0||n===0)throw new Error("\u5BBD\u5EA6\u548C\u9AD8\u5EA6\u4E0D\u80FD\u4E3A0");if(!t)throw new Error("\u56FE\u50CF\u5BF9\u8C61\u4E0D\u80FD\u4E3A\u7A7A");return new Promise(o=>{if(typeof b.default>"u"){this.resizeImageWithCanvas(e,n,t,r).then(o).catch(()=>{let i=document.createElement("canvas");i.width=t.width,i.height=t.height,i.getContext("2d").drawImage(t,0,0),o(i.toDataURL("image/png"))});return}let a=new b.default.Stage({container:document.createElement("div"),width:e,height:n}),s=new b.default.Layer;a.add(s);let u=new b.default.Image({image:t,width:e,height:n});r&&u.filters([b.default.Filters.Grayscale]),s.add(u),s.batchDraw();let m=a.toDataURL({mimeType:"image/png",quality:1,pixelRatio:1});a.destroy(),o(m)})},resizeImageWithCanvas:async function(e,n,t,r){return new Promise(o=>{let a=document.createElement("canvas");a.width=e,a.height=n;let s=a.getContext("2d");if(s.imageSmoothingEnabled=!0,s.imageSmoothingQuality="high",s.drawImage(t,0,0,e,n),r){let m=s.getImageData(0,0,e,n),i=m.data;for(let d=0;d<i.length;d+=4){let c=i[d]*.299+i[d+1]*.587+i[d+2]*.114;i[d]=i[d+1]=i[d+2]=c}s.putImageData(m,0,0)}let u=a.toDataURL("image/png");o(u)})},arrayToHex:function(e){return!e||e.length===0?"":Array.from(e).map(n=>Number(n).toString(16).padStart(2,"0")).join("")},hex2hex:function(e){if(!e||e.length===0)return[];let n=[];for(let t=0;t<e.length;t+=2)n.push("0x"+e.substring(t,t+2));return n},generatePreview:function(e,n){if(!e||e.length===0)return"";let t="";for(let r=0;r<e.length;r++)t+=e[r]===0?"0":"1",(r+1)%n===0&&(t+=`
|
|
2
|
+
`);return t},createImageData:function(e,n,t=null){let r=document.createElement("canvas");r.width=e,r.height=n;let o=r.getContext("2d");if(t){let a=o.createImageData(e,n);return a.data.set(t),a}else return o.createImageData(e,n)},formatHexOutput:function(e,n=0,t=16){if(!e||e.length===0)return"\u65E0\u6570\u636E";let r="";if(n===0&&Array.isArray(e))for(let o=0;o<e.length;o++)r+=e[o]+", ",(o+1)%t===0&&(r+=`
|
|
3
|
+
`);else if(e instanceof Uint8Array)for(let o=0;o<e.length;o++)r+=e[o].toString(16).padStart(2,"0")+" ",(o+1)%t===0&&(r+=`
|
|
4
|
+
`);else r=e.toString();return r},calculateOutputSize:function(e){let n=0;(Array.isArray(e)||e instanceof Uint8Array)&&(n=e.length);let t=n/1024;return{bytes:n,kilobytes:t,formatted:`${n} \u5B57\u8282 (${t.toFixed(2)} KB)`}},getSamplingModeDescription:function(e){return{0:"\u9010\u884C\u5F0F (\u4ECE\u5DE6\u5230\u53F3\uFF0C\u4ECE\u4E0A\u5230\u4E0B)",1:"\u9010\u5217\u5F0F (\u4ECE\u4E0A\u5230\u4E0B\uFF0C\u4ECE\u5DE6\u5230\u53F3)",2:"\u5217\u884C\u5F0F (\u5148\u5217\u540E\u884C)",3:"\u884C\u5217\u5F0F (\u5148\u884C\u540E\u5217)"}[e]||"\u672A\u77E5\u53D6\u6A21\u65B9\u5F0F"},getDefaultConfig:function(){return[0,0,0,0,1]}},ge=l.generate.bind(l),he=l.imageDataToHexArray.bind(l),fe=l.colorImageSampling.bind(l),xe=l.ImageSamplingRow.bind(l),pe=l.ImageSamplingCol.bind(l),ye=l.ImageSamplingColRow.bind(l),ke=l.ImageSamplingRowCol.bind(l),we=l.base64ToImageData.bind(l),be=l.resizeImageWithKonva.bind(l),ve=l.resizeImageWithCanvas.bind(l),Se=l.arrayToHex.bind(l),Ie=l.hex2hex.bind(l),Ce=l.generatePreview.bind(l),Ee=l.createImageData.bind(l),Me=l.formatHexOutput.bind(l),Ae=l.calculateOutputSize.bind(l),Te=l.getSamplingModeDescription.bind(l),De=l.getDefaultConfig.bind(l);0&&(module.exports={Endianness,ImageSamplingCol,ImageSamplingColRow,ImageSamplingRow,ImageSamplingRowCol,ImageToHexArray,arrayToHex,asciiArrToNum,base64ToImageData,bits16ToNum,bytesToNum,calculateOutputSize,colorImageSampling,compressJsonGzip,createImageData,debug,decompressJsonGzip,disableAllLogs,enableAllLogs,error,errorResult,formatHexOutput,generate,generatePreview,getDefaultConfig,getHIDCodeMapStr,getHIDCodeMapStrNum,getSamplingModeDescription,hex2hex,hidKeyCode,hslToHsv,hslToRgb,hsvToHsl,imageDataToHexArray,info,isImageValid,isShowPopover,log,numToAsciiArr,numToBits16,numToBytes,parseColorString,resetLoggerConfig,resizeImageWithCanvas,resizeImageWithKonva,rgbToHsl,setLoggerConfig,successResult,warn});
|
|
2
5
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils/hidKeyCode.ts","../src/utils/gzip.ts","../src/utils/usual.ts","../src/utils/result.ts","../src/utils/data.ts","../src/utils/color.ts"],"sourcesContent":["export * from './utils/interface/result.types'\r\nexport * from './utils/interface/color.types'\r\nexport * from './utils/hidKeyCode'\r\nexport * from './utils/gzip'\r\nexport * from './utils/usual'\r\nexport * from './utils/result'\r\nexport * from './utils/data'\r\nexport * from './utils/color'\r\n","// 类型定义\ninterface HIDKey {\n key: number\n word: string\n dec: string\n hex: string\n kind: number\n value: number\n aliases?: string[] // 可选别名数组\n}\n\nexport const hidKeyCode = [\n // 字母键(合并大小写,无组合形式)\n {\n key: 0,\n word: 'a',\n dec: '4',\n hex: '04',\n kind: 1,\n value: 4,\n aliases: ['A'],\n },\n {\n key: 2,\n word: 'b',\n dec: '5',\n hex: '05',\n kind: 1,\n value: 5,\n aliases: ['B'],\n },\n {\n key: 4,\n word: 'c',\n dec: '6',\n hex: '06',\n kind: 1,\n value: 6,\n aliases: ['C'],\n },\n {\n key: 6,\n word: 'd',\n dec: '7',\n hex: '07',\n kind: 1,\n value: 7,\n aliases: ['D'],\n },\n {\n key: 8,\n word: 'e',\n dec: '8',\n hex: '08',\n kind: 1,\n value: 8,\n aliases: ['E'],\n },\n {\n key: 10,\n word: 'f',\n dec: '9',\n hex: '09',\n kind: 1,\n value: 9,\n aliases: ['F'],\n },\n {\n key: 12,\n word: 'g',\n dec: '10',\n hex: '0A',\n kind: 1,\n value: 10,\n aliases: ['G'],\n },\n {\n key: 14,\n word: 'h',\n dec: '11',\n hex: '0B',\n kind: 1,\n value: 11,\n aliases: ['H'],\n },\n {\n key: 16,\n word: 'i',\n dec: '12',\n hex: '0C',\n kind: 1,\n value: 12,\n aliases: ['I'],\n },\n {\n key: 18,\n word: 'j',\n dec: '13',\n hex: '0D',\n kind: 1,\n value: 13,\n aliases: ['J'],\n },\n {\n key: 20,\n word: 'k',\n dec: '14',\n hex: '0E',\n kind: 1,\n value: 14,\n aliases: ['K'],\n },\n {\n key: 22,\n word: 'l',\n dec: '15',\n hex: '0F',\n kind: 1,\n value: 15,\n aliases: ['L'],\n },\n {\n key: 24,\n word: 'm',\n dec: '16',\n hex: '10',\n kind: 1,\n value: 16,\n aliases: ['M'],\n },\n {\n key: 26,\n word: 'n',\n dec: '17',\n hex: '11',\n kind: 1,\n value: 17,\n aliases: ['N'],\n },\n {\n key: 28,\n word: 'o',\n dec: '18',\n hex: '12',\n kind: 1,\n value: 18,\n aliases: ['O'],\n },\n {\n key: 30,\n word: 'p',\n dec: '19',\n hex: '13',\n kind: 1,\n value: 19,\n aliases: ['P'],\n },\n {\n key: 32,\n word: 'q',\n dec: '20',\n hex: '14',\n kind: 1,\n value: 20,\n aliases: ['Q'],\n },\n {\n key: 34,\n word: 'r',\n dec: '21',\n hex: '15',\n kind: 1,\n value: 21,\n aliases: ['R'],\n },\n {\n key: 36,\n word: 's',\n dec: '22',\n hex: '16',\n kind: 1,\n value: 22,\n aliases: ['S'],\n },\n {\n key: 38,\n word: 't',\n dec: '23',\n hex: '17',\n kind: 1,\n value: 23,\n aliases: ['T'],\n },\n {\n key: 40,\n word: 'u',\n dec: '24',\n hex: '18',\n kind: 1,\n value: 24,\n aliases: ['U'],\n },\n {\n key: 42,\n word: 'v',\n dec: '25',\n hex: '19',\n kind: 1,\n value: 25,\n aliases: ['V'],\n },\n {\n key: 44,\n word: 'w',\n dec: '26',\n hex: '1A',\n kind: 1,\n value: 26,\n aliases: ['W'],\n },\n {\n key: 46,\n word: 'x',\n dec: '27',\n hex: '1B',\n kind: 1,\n value: 27,\n aliases: ['X'],\n },\n {\n key: 48,\n word: 'y',\n dec: '28',\n hex: '1C',\n kind: 1,\n value: 28,\n aliases: ['Y'],\n },\n {\n key: 50,\n word: 'z',\n dec: '29',\n hex: '1D',\n kind: 1,\n value: 29,\n aliases: ['Z'],\n },\n\n // 数字和符号键(添加组合形式别名)\n {\n key: 52,\n word: '1',\n dec: '30',\n hex: '1E',\n kind: 1,\n value: 30,\n aliases: ['!', '1!'],\n },\n {\n key: 54,\n word: '2',\n dec: '31',\n hex: '1F',\n kind: 1,\n value: 31,\n aliases: ['@', '2@'],\n },\n {\n key: 56,\n word: '3',\n dec: '32',\n hex: '20',\n kind: 1,\n value: 32,\n aliases: ['#', '3#'],\n },\n {\n key: 58,\n word: '4',\n dec: '33',\n hex: '21',\n kind: 1,\n value: 33,\n aliases: ['$', '4$'],\n },\n {\n key: 60,\n word: '5',\n dec: '34',\n hex: '22',\n kind: 1,\n value: 34,\n aliases: ['%', '5%'],\n },\n {\n key: 62,\n word: '6',\n dec: '35',\n hex: '23',\n kind: 1,\n value: 35,\n aliases: ['^', '6^'],\n },\n {\n key: 64,\n word: '7',\n dec: '36',\n hex: '24',\n kind: 1,\n value: 36,\n aliases: ['&', '7&'],\n },\n {\n key: 66,\n word: '8',\n dec: '37',\n hex: '25',\n kind: 1,\n value: 37,\n aliases: ['*', '8*'],\n },\n {\n key: 68,\n word: '9',\n dec: '38',\n hex: '26',\n kind: 1,\n value: 38,\n aliases: ['(', '9('],\n },\n {\n key: 70,\n word: '0',\n dec: '39',\n hex: '27',\n kind: 1,\n value: 39,\n aliases: [')', '0)'],\n },\n {\n key: 77,\n word: '-',\n dec: '45',\n hex: '2D',\n kind: 1,\n value: 45,\n aliases: ['_', '-_'],\n },\n {\n key: 79,\n word: '=',\n dec: '46',\n hex: '2E',\n kind: 1,\n value: 46,\n aliases: ['+', '=+'],\n },\n {\n key: 81,\n word: '[',\n dec: '47',\n hex: '2F',\n kind: 1,\n value: 47,\n aliases: ['{', '[{'],\n },\n {\n key: 83,\n word: ']',\n dec: '48',\n hex: '30',\n kind: 1,\n value: 48,\n aliases: ['}', '}]'],\n },\n {\n key: 85,\n word: '\\\\',\n dec: '49',\n hex: '31',\n kind: 1,\n value: 49,\n aliases: ['|', '\\\\|'],\n },\n {\n key: 87,\n word: '`',\n dec: '50',\n hex: '32',\n kind: 1,\n value: 50,\n aliases: ['~', '`~'],\n },\n {\n key: 89,\n word: ';',\n dec: '51',\n hex: '33',\n kind: 1,\n value: 51,\n aliases: [':', ';:'],\n },\n {\n key: 91,\n word: \"'\",\n dec: '52',\n hex: '34',\n kind: 1,\n value: 52,\n aliases: ['\"', '\\'\"'],\n },\n {\n key: 95,\n word: ',',\n dec: '54',\n hex: '36',\n kind: 1,\n value: 54,\n aliases: ['<', ',<'],\n },\n {\n key: 97,\n word: '.',\n dec: '55',\n hex: '37',\n kind: 1,\n value: 55,\n aliases: ['>', '.>'],\n },\n {\n key: 99,\n word: '/',\n dec: '56',\n hex: '38',\n kind: 1,\n value: 56,\n aliases: ['?', '/?'],\n },\n\n // 特殊功能键(无重复,保持原样)\n { key: 72, word: 'Enter', dec: '40', hex: '28', kind: 1, value: 40 },\n { key: 73, word: 'Escape', dec: '41', hex: '29', kind: 1, value: 41 },\n { key: 74, word: 'Backspace', dec: '42', hex: '2A', kind: 1, value: 42 },\n { key: 75, word: 'Tab', dec: '43', hex: '2B', kind: 1, value: 43 },\n { key: 76, word: ' ', dec: '44', hex: '2C', kind: 1, value: 44 },\n { key: 101, word: 'CapsLock', dec: '57', hex: '39', kind: 1, value: 57 },\n { key: 102, word: 'F1', dec: '58', hex: '3A', kind: 1, value: 58 },\n { key: 103, word: 'F2', dec: '59', hex: '3B', kind: 1, value: 59 },\n { key: 104, word: 'F3', dec: '60', hex: '3C', kind: 1, value: 60 },\n { key: 105, word: 'F4', dec: '61', hex: '3D', kind: 1, value: 61 },\n { key: 106, word: 'F5', dec: '62', hex: '3E', kind: 1, value: 62 },\n { key: 107, word: 'F6', dec: '63', hex: '3F', kind: 1, value: 63 },\n { key: 108, word: 'F7', dec: '64', hex: '40', kind: 1, value: 64 },\n { key: 109, word: 'F8', dec: '65', hex: '41', kind: 1, value: 65 },\n { key: 110, word: 'F9', dec: '66', hex: '42', kind: 1, value: 66 },\n { key: 111, word: 'F10', dec: '67', hex: '43', kind: 1, value: 67 },\n { key: 112, word: 'F11', dec: '68', hex: '44', kind: 1, value: 68 },\n { key: 113, word: 'F12', dec: '69', hex: '45', kind: 1, value: 69 },\n { key: 114, word: 'PrintScreen', dec: '70', hex: '46', kind: 1, value: 70 },\n { key: 115, word: 'ScrollLock', dec: '71', hex: '47', kind: 1, value: 71 },\n { key: 116, word: 'Pause', dec: '72', hex: '48', kind: 1, value: 72 },\n { key: 117, word: 'Insert', dec: '73', hex: '49', kind: 1, value: 73 },\n { key: 118, word: 'Home', dec: '74', hex: '4A', kind: 1, value: 74 },\n { key: 119, word: 'PageUp', dec: '75', hex: '4B', kind: 1, value: 75 },\n { key: 120, word: 'DeleteForward', dec: '76', hex: '4C', kind: 1, value: 76 },\n { key: 121, word: 'End', dec: '77', hex: '4D', kind: 1, value: 77 },\n { key: 122, word: 'PageDown', dec: '78', hex: '4E', kind: 1, value: 78 },\n { key: 123, word: 'ArrowRight', dec: '79', hex: '4F', kind: 1, value: 79 },\n { key: 124, word: 'ArrowLeft', dec: '80', hex: '50', kind: 1, value: 80 },\n { key: 125, word: 'ArrowDown', dec: '81', hex: '51', kind: 1, value: 81 },\n { key: 126, word: 'ArrowUp', dec: '82', hex: '52', kind: 1, value: 82 },\n { key: 127, word: 'NumLock', dec: '83', hex: '53', kind: 1, value: 83 },\n { key: 128, word: 'Clear', dec: '83', hex: '53', kind: 1, value: 83 },\n { key: 160, word: 'F13', dec: '104', hex: '68', kind: 0, value: 104 },\n { key: 161, word: 'F14', dec: '105', hex: '69', kind: 0, value: 105 },\n { key: 162, word: 'F15', dec: '106', hex: '6A', kind: 0, value: 106 },\n { key: 163, word: 'F16', dec: '107', hex: '6B', kind: 0, value: 107 },\n { key: 164, word: 'LeftControl', dec: '224', hex: 'E0', kind: 0, value: 224 },\n { key: 165, word: 'LeftShift', dec: '225', hex: 'E1', kind: 0, value: 225 },\n { key: 166, word: 'LeftAlt', dec: '226', hex: 'E2', kind: 0, value: 226 },\n { key: 167, word: 'LeftGUI', dec: '227', hex: 'E3', kind: 0, value: 227 },\n {\n key: 168,\n word: 'RightControl',\n dec: '228',\n hex: 'E4',\n kind: 0,\n value: 228,\n },\n { key: 169, word: 'RightShift', dec: '229', hex: 'E5', kind: 0, value: 229 },\n { key: 170, word: 'RightAlt', dec: '230', hex: 'E6', kind: 0, value: 230 },\n { key: 171, word: 'RightGUI', dec: '231', hex: 'E7', kind: 0, value: 231 },\n]\n\n/********************************************************************************\n * @brief: 获取 HID 键码映射(主键名 + 别名)\n * @return {*}\n ********************************************************************************/\nexport const getHIDCodeMapStr = () => {\n return hidKeyCode.reduce((map, curKey) => {\n // 主键名映射\n map.set(curKey.word, curKey)\n\n // 别名映射(包含组合形式)\n if (curKey.aliases && curKey.aliases.length > 0) {\n curKey.aliases.forEach(alias => {\n map.set(alias, curKey)\n })\n }\n\n return map\n }, new Map<string, (typeof hidKeyCode)[0]>())\n}\n\n/********************************************************************************\n * @brief: 获取 HID 键码映射(value 映射)\n * @return {*}\n ********************************************************************************/\nexport const getHIDCodeMapStrNum = () => {\n return hidKeyCode.reduce(\n (pre, cur) => pre.set(cur.value, cur),\n new Map<number, (typeof hidKeyCode)[0]>()\n )\n}\n","import { gzipSync, gunzipSync } from 'fflate'\r\n\r\n/********************************************************************************\r\n * @brief: gzip 压缩 JSON 数据(转成 Blob,适合导出)\r\n * @param {any} data\r\n * @return {*}\r\n ********************************************************************************/\r\nexport const compressJsonGzip = (data: any): Blob => {\r\n // 1. 紧凑 JSON\r\n const jsonStr = JSON.stringify(data)\r\n // 2. 转 Uint8Array\r\n const uint8Array = new TextEncoder().encode(jsonStr)\r\n // 关键:显式转成 Uint8Array<ArrayBuffer>\r\n const compressedArray = new Uint8Array(gzipSync(uint8Array))\r\n // 4. 转 Blob\r\n return new Blob([compressedArray], { type: 'application/gzip' })\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 解压 gzip 格式的 JSON 文件\r\n * @param {File} file\r\n * @return {*}\r\n ********************************************************************************/\r\nexport const decompressJsonGzip = async (file: File): Promise<any> => {\r\n // 1. 读取文件\r\n const arrayBuffer = await file.arrayBuffer()\r\n // 2. gzip 解压(同步)\r\n const decompressedArray = gunzipSync(new Uint8Array(arrayBuffer))\r\n // 3. 转字符串并解析 JSON\r\n const jsonStr = new TextDecoder().decode(decompressedArray)\r\n return JSON.parse(jsonStr)\r\n}\r\n","\r\n/********************************************************************************\r\n * @brief: 判断 popover 是否显示\r\n * @param {string} popId\r\n * @return {*}\r\n ********************************************************************************/\r\nexport function isShowPopover(popId: string) {\r\n const box = document.getElementById(popId) // 1. 先拿元素\r\n const isShow =\r\n box &&\r\n window.getComputedStyle(box).display !== 'none' &&\r\n box.getAttribute('aria-hidden') !== 'true'\r\n return isShow\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 判断图片是否有效\r\n * @param {string} src\r\n * @return {*}\r\n ********************************************************************************/\r\nexport function isImageValid(src: string | File) {\r\n return new Promise(resolve => {\r\n const img = new Image()\r\n img.src = typeof src === 'string' ? src : URL.createObjectURL(src)\r\n img.onload = () => resolve(true)\r\n img.onerror = () => resolve(false)\r\n })\r\n}\r\n","import type { Result } from './interface/result.types'\r\n\r\n/********************************************************************************\r\n * @brief: 创建成功的结果对象\r\n * @param {T} data 业务数据(可选,默认 null)\r\n * @param {string} message 成功信息(可选,默认空字符串)\r\n * @param {number} code 成功状态码(可选,默认 0)\r\n * @return {*} 成功的 Result 对象\r\n ********************************************************************************/\r\nexport function successResult<T = unknown>(\r\n data: T = null as unknown as T,\r\n message: string = '',\r\n code: number = 0,\r\n): Result<T> {\r\n return {\r\n success: true,\r\n code,\r\n message,\r\n data,\r\n }\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 创建失败的结果对象\r\n * @param {string} message 错误信息(必选)\r\n * @param {number} code 错误码(可选,默认 -1)\r\n * @param {T} data 错误相关数据(可选,默认 null)\r\n * @return {*} 失败的 Result 对象\r\n ********************************************************************************/\r\nexport function errorResult<T = unknown>(\r\n message: string,\r\n code: number = -1,\r\n data: T = null as unknown as T,\r\n): Result<T> {\r\n return {\r\n success: false,\r\n code,\r\n message,\r\n data,\r\n }\r\n}\r\n","/********************************************************************************\r\n * @brief: 字节序枚举(大端/小端)\r\n * @return {*}\r\n ********************************************************************************/\r\nexport const Endianness = {\r\n LITTLE: 'little', // 小端(低字节在前)\r\n BIG: 'big', // 大端(高字节在前)\r\n}\r\n\r\nexport type Endianness = (typeof Endianness)[keyof typeof Endianness]\r\n\r\n/********************************************************************************\r\n * @brief: 将数字转换为指定字节序的字节数组\r\n * @param {number} number 待转换的数字(自动截断为无符号整数)\r\n * @param {number} byteCount 目标字节长度(必须为正整数)\r\n * @param {Endianness} endian 字节序(默认小端)\r\n * @return {*} 字节数组(每个元素为 0-255 的整数)\r\n ********************************************************************************/\r\nexport const numToBytes = (\r\n number: number,\r\n byteCount: number,\r\n endian: Endianness = Endianness.BIG,\r\n): number[] => {\r\n if (!Number.isInteger(byteCount) || byteCount <= 0) {\r\n throw new Error('Byte count must be a positive integer.')\r\n }\r\n\r\n const unsignedNum = number >>> 0 // 转为无符号整数\r\n const byteArray: number[] = new Array(byteCount)\r\n\r\n for (let i = 0; i < byteCount; i++) {\r\n // 根据字节序计算位移:小端用 i*8,大端用 (byteCount-1 - i)*8\r\n const shift = endian === Endianness.LITTLE ? i * 8 : (byteCount - 1 - i) * 8\r\n byteArray[i] = (unsignedNum >> shift) & 0xff\r\n }\r\n\r\n return byteArray\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 将任意长度的字节数组转换为数字(支持不同字节序)\r\n * @param {number[]} bytes 字节数组\r\n * @param {Endianness} endian 字节序(默认小端)\r\n * @return {*} 转换后的数字\r\n ********************************************************************************/\r\nexport const bytesToNum = (\r\n bytes: number[],\r\n endian: Endianness = Endianness.BIG,\r\n): number => {\r\n let result = 0\r\n\r\n if (endian === Endianness.LITTLE) {\r\n // 小端:从低位到高位\r\n for (let i = 0; i < bytes.length; i++) {\r\n // 根据字节序计算位移:小端用 i*8,大端用 (byteCount-1 - i)*8\r\n result |= (bytes[i] & 0xff) << (i * 8)\r\n }\r\n } else {\r\n // 大端:从高位到低位\r\n for (let i = 0; i < bytes.length; i++) {\r\n result |= (bytes[i] & 0xff) << ((bytes.length - 1 - i) * 8)\r\n }\r\n }\r\n\r\n return result\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 将数字转换为16位无符号整数的指定字节序字节数组(固定2字节)\r\n * @param {number} number 待转换的数字(自动截断为16位无符号整数范围)\r\n * @param {Endianness} endian 字节序(默认小端)\r\n * @return {*} 长度为2的字节数组\r\n ********************************************************************************/\r\nexport const numToBits16 = (\r\n number: number,\r\n endian: Endianness = Endianness.BIG,\r\n): [number, number] => {\r\n const uint16 = number & 0xffff // 截断为16位无符号整数\r\n\r\n if (endian === Endianness.LITTLE) {\r\n return [uint16 & 0xff, (uint16 >> 8) & 0xff] // 小端:[低8位, 高8位]\r\n } else {\r\n return [(uint16 >> 8) & 0xff, uint16 & 0xff] // 大端:[高8位, 低8位]\r\n }\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 将16位字节数组转换为数字(与numTo16Bits相反功能)\r\n * @param {[number, number]} bytes 长度为2的字节数组\r\n * @param {Endianness} endian 字节序(默认小端)\r\n * @return {*} 转换后的数字\r\n ********************************************************************************/\r\nexport const bits16ToNum = (\r\n bytes: [number, number],\r\n endian: Endianness = Endianness.BIG,\r\n): number => {\r\n if (bytes.length !== 2) {\r\n throw new Error('Input array must have exactly 2 elements')\r\n }\r\n\r\n if (endian === Endianness.LITTLE) {\r\n // 小端:[低8位, 高8位]\r\n return (bytes[1] << 8) | bytes[0]\r\n } else {\r\n // 大端:[高8位, 低8位]\r\n return (bytes[0] << 8) | bytes[1]\r\n }\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 将数字转换为ASCII码值数组(每个数字转换为其对应的ASCII码)\r\n * @param {number} n 待转换的数字(自动取绝对值)\r\n * @return {*} ASCII码值数组(每个元素为0-255的整数)\r\n ********************************************************************************/\r\nexport const numToAsciiArr = (n: number): number[] => {\r\n return Math.abs(n) // 去符号\r\n .toString() // 变成 \"12345\"\r\n .split('') // [\"1\",\"2\",\"3\",\"4\",\"5\"]\r\n .map(c => c.charCodeAt(0)) // [49,50,51,52,53]\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 将ASCII码值数组转换为对应的数字\r\n * @param {number[]} ascii\r\n * @return {*}\r\n ********************************************************************************/\r\nexport const asciiArrToNum = (ascii: number[]): number => {\r\n return Number(String.fromCharCode(...ascii))\r\n}\r\n","import type {\r\n ParsedColor,\r\n ParsedHSL,\r\n ParsedHSLA,\r\n ParsedRGB,\r\n ParsedRGBA,\r\n ParsedHSV,\r\n} from './interface/color.types'\r\n\r\n/********************************************************************************\r\n * @brief: 限制数值在指定范围内\r\n * @param {number} value\r\n * @param {number} min\r\n * @param {number} max\r\n * @return {*}\r\n ********************************************************************************/\r\nconst clamp = (value: number, min: number, max: number): number => {\r\n return Math.min(Math.max(value, min), max)\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 解析颜色字符串(支持 rgb/rgba/hsv/hsl 格式)\r\n * @param {string} str 待解析的颜色字符串(如 \"hsl(120, 100%, 50%)\"、\"hsla(240, 50%, 70%, 0.8)\")\r\n * @return {*} 解析后的颜色对象,不匹配任何格式时返回 null\r\n ********************************************************************************/\r\nexport function parseColorString(str: string): ParsedColor | null {\r\n /********************************************************************************\r\n * @brief: 工具函数:将百分比/数字转换为 0-255 的 RGB 分量\r\n * @param {string} valueStr\r\n * @return {*}\r\n ********************************************************************************/\r\n const toRgbComponent = (valueStr: string): number => {\r\n const isPercent = valueStr.endsWith('%')\r\n const value = parseFloat(valueStr.replace('%', ''))\r\n\r\n if (isPercent) {\r\n // 百分比转换(0%-100% → 0-255)\r\n return Math.round(clamp(value / 100, 0, 1) * 255)\r\n } else {\r\n // 直接数字(0-255)\r\n return clamp(Math.round(value), 0, 255)\r\n }\r\n }\r\n\r\n /********************************************************************************\r\n * @brief: 工具函数:将百分比/数字转换为 0-1 的 Alpha 分量\r\n * @param {string} valueStr\r\n * @return {*}\r\n ********************************************************************************/\r\n const toAlphaComponent = (valueStr: string): number => {\r\n const isPercent = valueStr.endsWith('%')\r\n const value = parseFloat(valueStr.replace('%', ''))\r\n\r\n if (isPercent) {\r\n return clamp(value / 100, 0, 1)\r\n } else {\r\n return clamp(value, 0, 1)\r\n }\r\n }\r\n\r\n /********************************************************************************\r\n * @brief: 工具函数:将百分比转换为 0-1 的 HSV/HSL 分量(饱和度/明度/亮度)\r\n * @param {string} valueStr\r\n * @return {*}\r\n ********************************************************************************/\r\n const toPercentComponent = (valueStr: string): number => {\r\n if (!valueStr.endsWith('%')) return 0 // 无效格式默认0\r\n const value = parseFloat(valueStr.replace('%', ''))\r\n return clamp(value / 100, 0, 1)\r\n }\r\n\r\n // 1. 匹配 rgb(...) 格式\r\n const rgbRegex =\r\n /^rgb\\(\\s*(\\d+(\\.\\d+)?%?)\\s*,\\s*(\\d+(\\.\\d+)?%?)\\s*,\\s*(\\d+(\\.\\d+)?%?)\\s*\\)$/i\r\n const rgbMatch = str.match(rgbRegex)\r\n if (rgbMatch) {\r\n const [, rStr, , gStr, , bStr] = rgbMatch\r\n return {\r\n type: 'rgb',\r\n r: toRgbComponent(rStr),\r\n g: toRgbComponent(gStr),\r\n b: toRgbComponent(bStr),\r\n }\r\n }\r\n\r\n // 2. 匹配 rgba(...) 格式\r\n const rgbaRegex =\r\n /^rgba\\(\\s*(\\d+(\\.\\d+)?%?)\\s*,\\s*(\\d+(\\.\\d+)?%?)\\s*,\\s*(\\d+(\\.\\d+)?%?)\\s*,\\s*(\\d+(\\.\\d+)?%?)\\s*\\)$/i\r\n const rgbaMatch = str.match(rgbaRegex)\r\n if (rgbaMatch) {\r\n const [, rStr, , gStr, , bStr, , aStr] = rgbaMatch\r\n return {\r\n type: 'rgba',\r\n r: toRgbComponent(rStr),\r\n g: toRgbComponent(gStr),\r\n b: toRgbComponent(bStr),\r\n a: toAlphaComponent(aStr),\r\n }\r\n }\r\n\r\n // 3. 匹配 hsv(...) 格式\r\n const hsvRegex =\r\n /^hsv\\(\\s*(\\d+(\\.\\d+)?)\\s*,\\s*(\\d+(\\.\\d+)?%)\\s*,\\s*(\\d+(\\.\\d+)?%)\\s*\\)$/i\r\n const hsvMatch = str.match(hsvRegex)\r\n if (hsvMatch) {\r\n const [, hStr, , sStr, , vStr] = hsvMatch\r\n return {\r\n type: 'hsv',\r\n h: clamp(parseFloat(hStr), 0, 360),\r\n s: toPercentComponent(sStr),\r\n v: toPercentComponent(vStr),\r\n }\r\n }\r\n\r\n // 4. 匹配 hsl(...) 格式(新增)\r\n const hslRegex =\r\n /^hsl\\(\\s*(\\d+(\\.\\d+)?)\\s*,\\s*(\\d+(\\.\\d+)?%)\\s*,\\s*(\\d+(\\.\\d+)?%)\\s*\\)$/i\r\n const hslMatch = str.match(hslRegex)\r\n if (hslMatch) {\r\n const [, hStr, , sStr, , lStr] = hslMatch\r\n return {\r\n type: 'hsl',\r\n h: clamp(parseFloat(hStr), 0, 360), // 色相 0-360\r\n s: toPercentComponent(sStr), // 饱和度 0-1\r\n l: toPercentComponent(lStr), // 明度 0-1\r\n }\r\n }\r\n\r\n // 5. 匹配 hsla(...) 格式(带透明度,新增)\r\n const hslaRegex =\r\n /^hsla\\(\\s*(\\d+(\\.\\d+)?)\\s*,\\s*(\\d+(\\.\\d+)?%)\\s*,\\s*(\\d+(\\.\\d+)?%)\\s*,\\s*(\\d+(\\.\\d+)?%?)\\s*\\)$/i\r\n const hslaMatch = str.match(hslaRegex)\r\n if (hslaMatch) {\r\n const [, hStr, , sStr, , lStr, , aStr] = hslaMatch\r\n return {\r\n type: 'hsla',\r\n h: clamp(parseFloat(hStr), 0, 360),\r\n s: toPercentComponent(sStr),\r\n l: toPercentComponent(lStr),\r\n a: toAlphaComponent(aStr), // 透明度 0-1\r\n }\r\n }\r\n\r\n // 不匹配任何格式\r\n return null\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: HSL 转 RGB 颜色转换\r\n * @param {ParsedColor} hsl HSL 颜色对象(分量范围 0-255)\r\n * @return {*} RGB 颜色对象(分量范围 0-255)\r\n ********************************************************************************/\r\nexport function hslToRgb(\r\n hsl: ParsedHSL | ParsedHSLA | null,\r\n): ParsedColor | null {\r\n // 输入边界处理\r\n const h = clamp(hsl.h, 0, 360) / 360 // 归一化色相到 0-1\r\n const s = clamp(hsl.s, 0, 1)\r\n const l = clamp(hsl.l, 0, 1)\r\n\r\n let r = 0,\r\n g = 0,\r\n b = 0\r\n\r\n if (s === 0) {\r\n // 无饱和度(灰度)\r\n r = g = b = l\r\n } else {\r\n // 辅助函数:计算颜色分量\r\n const hue2rgb = (p: number, q: number, t: number): number => {\r\n if (t < 0) t += 1\r\n if (t > 1) t -= 1\r\n if (t < 1 / 6) return p + (q - p) * 6 * t\r\n if (t < 1 / 2) return q\r\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6\r\n return p\r\n }\r\n\r\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s\r\n const p = 2 * l - q\r\n\r\n r = hue2rgb(p, q, h + 1 / 3)\r\n g = hue2rgb(p, q, h)\r\n b = hue2rgb(p, q, h - 1 / 3)\r\n }\r\n\r\n // 转换为 0-255 范围并取整\r\n return {\r\n type: 'rgb',\r\n r: Math.round(r * 255),\r\n g: Math.round(g * 255),\r\n b: Math.round(b * 255),\r\n }\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: RGB 转 HSL 颜色转换\r\n * @param {ParsedColor} rgb RGB 颜色对象(分量范围 0-255)\r\n * @return {*} HSL 颜色对象(h:0-360, s:0-1, l:0-1)\r\n ********************************************************************************/\r\nexport function rgbToHsl(\r\n rgb: ParsedRGB | ParsedRGBA | null,\r\n): ParsedColor | null {\r\n // 1. 输入处理:将 RGB 分量归一化到 0-1 范围\r\n const r = clamp(rgb.r, 0, 255) / 255\r\n const g = clamp(rgb.g, 0, 255) / 255\r\n const b = clamp(rgb.b, 0, 255) / 255\r\n\r\n // 2. 计算最大/最小分量值\r\n const max = Math.max(r, g, b)\r\n const min = Math.min(r, g, b)\r\n const delta = max - min // 颜色范围(用于计算饱和度)\r\n\r\n // 3. 计算明度(Lightness)\r\n const l = (max + min) / 2\r\n\r\n // 4. 计算饱和度(Saturation)\r\n let s = 0\r\n if (delta !== 0) {\r\n // 饱和度公式:根据明度调整计算方式\r\n s = delta / (1 - Math.abs(2 * l - 1))\r\n }\r\n\r\n // 5. 计算色相(Hue)\r\n let h = 0\r\n if (delta !== 0) {\r\n switch (max) {\r\n case r:\r\n // 红色为最大分量时,色相基于 g - b 计算\r\n h = ((g - b) / delta) % 6\r\n break\r\n case g:\r\n // 绿色为最大分量时,色相基于 b - r 计算\r\n h = (b - r) / delta + 2\r\n break\r\n case b:\r\n // 蓝色为最大分量时,色相基于 r - g 计算\r\n h = (r - g) / delta + 4\r\n break\r\n }\r\n // 转换为 0-360 度(若为负数则加 360 确保在正数范围)\r\n h = Math.round(h * 60)\r\n if (h < 0) h += 360\r\n }\r\n\r\n // 6. 输出处理:确保饱和度和明度在 0-1 范围内\r\n return {\r\n type: 'hsl',\r\n h: clamp(h, 0, 360),\r\n s: clamp(s, 0, 1),\r\n l: clamp(l, 0, 1),\r\n }\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: HSV 转 HSL 颜色转换\r\n * @param {ParsedColor} hsv HSV 颜色对象(分量范围 0-255)\r\n * @return {*} HSL 颜色对象(h:0-360, s:0-1, l:0-1)\r\n ********************************************************************************/\r\nexport function hsvToHsl(hsv: ParsedHSV): ParsedColor {\r\n const { h, s: sHsv, v } = hsv\r\n\r\n // 计算HSL的亮度(L)\r\n let l: number\r\n if (sHsv === 0) {\r\n // 饱和度为0时,亮度等于明度(灰度)\r\n l = v\r\n } else {\r\n l = ((2 - sHsv) * v) / 2\r\n }\r\n // 确保亮度在0-1范围内\r\n l = Math.max(0, Math.min(1, l))\r\n\r\n // 计算HSL的饱和度(S)\r\n let s: number\r\n if (l === 0 || l === 1) {\r\n // 纯黑或纯白时饱和度为0\r\n s = 0\r\n } else {\r\n s = (sHsv * v) / (1 - Math.abs(2 * l - 1))\r\n // 确保饱和度在0-1范围内\r\n s = Math.max(0, Math.min(1, s))\r\n }\r\n\r\n return {\r\n type: 'hsl',\r\n h: Math.max(0, Math.min(360, h)), // 确保色相在0-360范围内\r\n s,\r\n l,\r\n }\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: HSL 转 HSV 颜色转换\r\n * @param {ParsedColor} hsl HSL 颜色对象(分量范围 0-255)\r\n * @return {*} HSV 颜色对象(h:0-360, s:0-1, v:0-1)\r\n ********************************************************************************/\r\nexport function hslToHsv(hsl: ParsedHSL): ParsedColor {\r\n const { h, s: sHsl, l } = hsl\r\n\r\n // 计算HSV的明度(V)\r\n const v = l + sHsl * Math.min(l, 1 - l)\r\n // 确保明度在0-1范围内\r\n const clampedV = Math.max(0, Math.min(1, v))\r\n\r\n // 计算HSV的饱和度(S)\r\n let s: number\r\n if (clampedV === 0) {\r\n // 明度为0时饱和度为0(纯黑)\r\n s = 0\r\n } else {\r\n s = 2 * (1 - l / clampedV)\r\n // 确保饱和度在0-1范围内\r\n s = Math.max(0, Math.min(1, s))\r\n }\r\n\r\n return {\r\n type: 'hsv',\r\n h: Math.max(0, Math.min(360, h)), // 确保色相在0-360范围内\r\n s,\r\n v: clampedV,\r\n }\r\n}\r\n"],"mappings":"4ZAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,EAAA,kBAAAC,EAAA,gBAAAC,EAAA,eAAAC,EAAA,qBAAAC,EAAA,uBAAAC,EAAA,gBAAAC,EAAA,qBAAAC,EAAA,wBAAAC,EAAA,eAAAC,EAAA,aAAAC,EAAA,aAAAC,EAAA,aAAAC,EAAA,iBAAAC,EAAA,kBAAAC,EAAA,kBAAAC,EAAA,gBAAAC,EAAA,eAAAC,EAAA,qBAAAC,EAAA,aAAAC,EAAA,kBAAAC,IAAA,eAAAC,EAAAvB,GCWO,IAAMwB,EAAa,CAExB,CACE,IAAK,EACL,KAAM,IACN,IAAK,IACL,IAAK,KACL,KAAM,EACN,MAAO,EACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,EACL,KAAM,IACN,IAAK,IACL,IAAK,KACL,KAAM,EACN,MAAO,EACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,EACL,KAAM,IACN,IAAK,IACL,IAAK,KACL,KAAM,EACN,MAAO,EACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,EACL,KAAM,IACN,IAAK,IACL,IAAK,KACL,KAAM,EACN,MAAO,EACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,EACL,KAAM,IACN,IAAK,IACL,IAAK,KACL,KAAM,EACN,MAAO,EACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,IACL,IAAK,KACL,KAAM,EACN,MAAO,EACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EAGA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,I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","names":["index_exports","__export","Endianness","asciiArrToNum","bits16ToNum","bytesToNum","compressJsonGzip","decompressJsonGzip","errorResult","getHIDCodeMapStr","getHIDCodeMapStrNum","hidKeyCode","hslToHsv","hslToRgb","hsvToHsl","isImageValid","isShowPopover","numToAsciiArr","numToBits16","numToBytes","parseColorString","rgbToHsl","successResult","__toCommonJS","hidKeyCode","getHIDCodeMapStr","map","curKey","alias","getHIDCodeMapStrNum","pre","cur","import_fflate","compressJsonGzip","data","jsonStr","uint8Array","compressedArray","decompressJsonGzip","file","arrayBuffer","decompressedArray","isShowPopover","popId","box","isImageValid","src","resolve","img","successResult","data","message","code","errorResult","Endianness","numToBytes","number","byteCount","endian","unsignedNum","byteArray","i","shift","bytesToNum","bytes","result","numToBits16","uint16","bits16ToNum","numToAsciiArr","n","c","asciiArrToNum","ascii","clamp","value","min","max","parseColorString","str","toRgbComponent","valueStr","isPercent","toAlphaComponent","toPercentComponent","rgbRegex","rgbMatch","rStr","gStr","bStr","rgbaRegex","rgbaMatch","aStr","hsvRegex","hsvMatch","hStr","sStr","vStr","hslRegex","hslMatch","lStr","hslaRegex","hslaMatch","hslToRgb","hsl","h","s","l","r","g","b","hue2rgb","p","q","t","rgbToHsl","rgb","delta","hsvToHsl","hsv","sHsv","v","hslToHsv","sHsl","clampedV"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils/hidKeyCode.ts","../src/utils/gzip.ts","../src/utils/usual.ts","../src/utils/result.ts","../src/utils/data.ts","../src/utils/color.ts","../src/utils/debug.ts","../src/utils/imageData.ts"],"sourcesContent":["export * from './utils/interface/result.types'\r\nexport * from './utils/interface/color.types'\r\nexport * from './utils/interface/debug.types'\r\nexport * from './utils/hidKeyCode'\r\nexport * from './utils/gzip'\r\nexport * from './utils/usual'\r\nexport * from './utils/result'\r\nexport * from './utils/data'\r\nexport * from './utils/color'\r\nexport * from './utils/debug'\r\nexport * from './utils/imageData'","// 类型定义\ninterface HIDKey {\n key: number\n word: string\n dec: string\n hex: string\n kind: number\n value: number\n aliases?: string[] // 可选别名数组\n}\n\nexport const hidKeyCode = [\n // 字母键(合并大小写,无组合形式)\n {\n key: 0,\n word: 'a',\n dec: '4',\n hex: '04',\n kind: 1,\n value: 4,\n aliases: ['A'],\n },\n {\n key: 2,\n word: 'b',\n dec: '5',\n hex: '05',\n kind: 1,\n value: 5,\n aliases: ['B'],\n },\n {\n key: 4,\n word: 'c',\n dec: '6',\n hex: '06',\n kind: 1,\n value: 6,\n aliases: ['C'],\n },\n {\n key: 6,\n word: 'd',\n dec: '7',\n hex: '07',\n kind: 1,\n value: 7,\n aliases: ['D'],\n },\n {\n key: 8,\n word: 'e',\n dec: '8',\n hex: '08',\n kind: 1,\n value: 8,\n aliases: ['E'],\n },\n {\n key: 10,\n word: 'f',\n dec: '9',\n hex: '09',\n kind: 1,\n value: 9,\n aliases: ['F'],\n },\n {\n key: 12,\n word: 'g',\n dec: '10',\n hex: '0A',\n kind: 1,\n value: 10,\n aliases: ['G'],\n },\n {\n key: 14,\n word: 'h',\n dec: '11',\n hex: '0B',\n kind: 1,\n value: 11,\n aliases: ['H'],\n },\n {\n key: 16,\n word: 'i',\n dec: '12',\n hex: '0C',\n kind: 1,\n value: 12,\n aliases: ['I'],\n },\n {\n key: 18,\n word: 'j',\n dec: '13',\n hex: '0D',\n kind: 1,\n value: 13,\n aliases: ['J'],\n },\n {\n key: 20,\n word: 'k',\n dec: '14',\n hex: '0E',\n kind: 1,\n value: 14,\n aliases: ['K'],\n },\n {\n key: 22,\n word: 'l',\n dec: '15',\n hex: '0F',\n kind: 1,\n value: 15,\n aliases: ['L'],\n },\n {\n key: 24,\n word: 'm',\n dec: '16',\n hex: '10',\n kind: 1,\n value: 16,\n aliases: ['M'],\n },\n {\n key: 26,\n word: 'n',\n dec: '17',\n hex: '11',\n kind: 1,\n value: 17,\n aliases: ['N'],\n },\n {\n key: 28,\n word: 'o',\n dec: '18',\n hex: '12',\n kind: 1,\n value: 18,\n aliases: ['O'],\n },\n {\n key: 30,\n word: 'p',\n dec: '19',\n hex: '13',\n kind: 1,\n value: 19,\n aliases: ['P'],\n },\n {\n key: 32,\n word: 'q',\n dec: '20',\n hex: '14',\n kind: 1,\n value: 20,\n aliases: ['Q'],\n },\n {\n key: 34,\n word: 'r',\n dec: '21',\n hex: '15',\n kind: 1,\n value: 21,\n aliases: ['R'],\n },\n {\n key: 36,\n word: 's',\n dec: '22',\n hex: '16',\n kind: 1,\n value: 22,\n aliases: ['S'],\n },\n {\n key: 38,\n word: 't',\n dec: '23',\n hex: '17',\n kind: 1,\n value: 23,\n aliases: ['T'],\n },\n {\n key: 40,\n word: 'u',\n dec: '24',\n hex: '18',\n kind: 1,\n value: 24,\n aliases: ['U'],\n },\n {\n key: 42,\n word: 'v',\n dec: '25',\n hex: '19',\n kind: 1,\n value: 25,\n aliases: ['V'],\n },\n {\n key: 44,\n word: 'w',\n dec: '26',\n hex: '1A',\n kind: 1,\n value: 26,\n aliases: ['W'],\n },\n {\n key: 46,\n word: 'x',\n dec: '27',\n hex: '1B',\n kind: 1,\n value: 27,\n aliases: ['X'],\n },\n {\n key: 48,\n word: 'y',\n dec: '28',\n hex: '1C',\n kind: 1,\n value: 28,\n aliases: ['Y'],\n },\n {\n key: 50,\n word: 'z',\n dec: '29',\n hex: '1D',\n kind: 1,\n value: 29,\n aliases: ['Z'],\n },\n\n // 数字和符号键(添加组合形式别名)\n {\n key: 52,\n word: '1',\n dec: '30',\n hex: '1E',\n kind: 1,\n value: 30,\n aliases: ['!', '1!'],\n },\n {\n key: 54,\n word: '2',\n dec: '31',\n hex: '1F',\n kind: 1,\n value: 31,\n aliases: ['@', '2@'],\n },\n {\n key: 56,\n word: '3',\n dec: '32',\n hex: '20',\n kind: 1,\n value: 32,\n aliases: ['#', '3#'],\n },\n {\n key: 58,\n word: '4',\n dec: '33',\n hex: '21',\n kind: 1,\n value: 33,\n aliases: ['$', '4$'],\n },\n {\n key: 60,\n word: '5',\n dec: '34',\n hex: '22',\n kind: 1,\n value: 34,\n aliases: ['%', '5%'],\n },\n {\n key: 62,\n word: '6',\n dec: '35',\n hex: '23',\n kind: 1,\n value: 35,\n aliases: ['^', '6^'],\n },\n {\n key: 64,\n word: '7',\n dec: '36',\n hex: '24',\n kind: 1,\n value: 36,\n aliases: ['&', '7&'],\n },\n {\n key: 66,\n word: '8',\n dec: '37',\n hex: '25',\n kind: 1,\n value: 37,\n aliases: ['*', '8*'],\n },\n {\n key: 68,\n word: '9',\n dec: '38',\n hex: '26',\n kind: 1,\n value: 38,\n aliases: ['(', '9('],\n },\n {\n key: 70,\n word: '0',\n dec: '39',\n hex: '27',\n kind: 1,\n value: 39,\n aliases: [')', '0)'],\n },\n {\n key: 77,\n word: '-',\n dec: '45',\n hex: '2D',\n kind: 1,\n value: 45,\n aliases: ['_', '-_'],\n },\n {\n key: 79,\n word: '=',\n dec: '46',\n hex: '2E',\n kind: 1,\n value: 46,\n aliases: ['+', '=+'],\n },\n {\n key: 81,\n word: '[',\n dec: '47',\n hex: '2F',\n kind: 1,\n value: 47,\n aliases: ['{', '[{'],\n },\n {\n key: 83,\n word: ']',\n dec: '48',\n hex: '30',\n kind: 1,\n value: 48,\n aliases: ['}', '}]'],\n },\n {\n key: 85,\n word: '\\\\',\n dec: '49',\n hex: '31',\n kind: 1,\n value: 49,\n aliases: ['|', '\\\\|'],\n },\n {\n key: 87,\n word: '`',\n dec: '50',\n hex: '32',\n kind: 1,\n value: 50,\n aliases: ['~', '`~'],\n },\n {\n key: 89,\n word: ';',\n dec: '51',\n hex: '33',\n kind: 1,\n value: 51,\n aliases: [':', ';:'],\n },\n {\n key: 91,\n word: \"'\",\n dec: '52',\n hex: '34',\n kind: 1,\n value: 52,\n aliases: ['\"', '\\'\"'],\n },\n {\n key: 95,\n word: ',',\n dec: '54',\n hex: '36',\n kind: 1,\n value: 54,\n aliases: ['<', ',<'],\n },\n {\n key: 97,\n word: '.',\n dec: '55',\n hex: '37',\n kind: 1,\n value: 55,\n aliases: ['>', '.>'],\n },\n {\n key: 99,\n word: '/',\n dec: '56',\n hex: '38',\n kind: 1,\n value: 56,\n aliases: ['?', '/?'],\n },\n\n // 特殊功能键(无重复,保持原样)\n { key: 72, word: 'Enter', dec: '40', hex: '28', kind: 1, value: 40 },\n { key: 73, word: 'Escape', dec: '41', hex: '29', kind: 1, value: 41 },\n { key: 74, word: 'Backspace', dec: '42', hex: '2A', kind: 1, value: 42 },\n { key: 75, word: 'Tab', dec: '43', hex: '2B', kind: 1, value: 43 },\n { key: 76, word: ' ', dec: '44', hex: '2C', kind: 1, value: 44 },\n { key: 101, word: 'CapsLock', dec: '57', hex: '39', kind: 1, value: 57 },\n { key: 102, word: 'F1', dec: '58', hex: '3A', kind: 1, value: 58 },\n { key: 103, word: 'F2', dec: '59', hex: '3B', kind: 1, value: 59 },\n { key: 104, word: 'F3', dec: '60', hex: '3C', kind: 1, value: 60 },\n { key: 105, word: 'F4', dec: '61', hex: '3D', kind: 1, value: 61 },\n { key: 106, word: 'F5', dec: '62', hex: '3E', kind: 1, value: 62 },\n { key: 107, word: 'F6', dec: '63', hex: '3F', kind: 1, value: 63 },\n { key: 108, word: 'F7', dec: '64', hex: '40', kind: 1, value: 64 },\n { key: 109, word: 'F8', dec: '65', hex: '41', kind: 1, value: 65 },\n { key: 110, word: 'F9', dec: '66', hex: '42', kind: 1, value: 66 },\n { key: 111, word: 'F10', dec: '67', hex: '43', kind: 1, value: 67 },\n { key: 112, word: 'F11', dec: '68', hex: '44', kind: 1, value: 68 },\n { key: 113, word: 'F12', dec: '69', hex: '45', kind: 1, value: 69 },\n { key: 114, word: 'PrintScreen', dec: '70', hex: '46', kind: 1, value: 70 },\n { key: 115, word: 'ScrollLock', dec: '71', hex: '47', kind: 1, value: 71 },\n { key: 116, word: 'Pause', dec: '72', hex: '48', kind: 1, value: 72 },\n { key: 117, word: 'Insert', dec: '73', hex: '49', kind: 1, value: 73 },\n { key: 118, word: 'Home', dec: '74', hex: '4A', kind: 1, value: 74 },\n { key: 119, word: 'PageUp', dec: '75', hex: '4B', kind: 1, value: 75 },\n { key: 120, word: 'DeleteForward', dec: '76', hex: '4C', kind: 1, value: 76 },\n { key: 121, word: 'End', dec: '77', hex: '4D', kind: 1, value: 77 },\n { key: 122, word: 'PageDown', dec: '78', hex: '4E', kind: 1, value: 78 },\n { key: 123, word: 'ArrowRight', dec: '79', hex: '4F', kind: 1, value: 79 },\n { key: 124, word: 'ArrowLeft', dec: '80', hex: '50', kind: 1, value: 80 },\n { key: 125, word: 'ArrowDown', dec: '81', hex: '51', kind: 1, value: 81 },\n { key: 126, word: 'ArrowUp', dec: '82', hex: '52', kind: 1, value: 82 },\n { key: 127, word: 'NumLock', dec: '83', hex: '53', kind: 1, value: 83 },\n { key: 128, word: 'Clear', dec: '83', hex: '53', kind: 1, value: 83 },\n { key: 160, word: 'F13', dec: '104', hex: '68', kind: 0, value: 104 },\n { key: 161, word: 'F14', dec: '105', hex: '69', kind: 0, value: 105 },\n { key: 162, word: 'F15', dec: '106', hex: '6A', kind: 0, value: 106 },\n { key: 163, word: 'F16', dec: '107', hex: '6B', kind: 0, value: 107 },\n { key: 164, word: 'LeftControl', dec: '224', hex: 'E0', kind: 0, value: 224 },\n { key: 165, word: 'LeftShift', dec: '225', hex: 'E1', kind: 0, value: 225 },\n { key: 166, word: 'LeftAlt', dec: '226', hex: 'E2', kind: 0, value: 226 },\n { key: 167, word: 'LeftGUI', dec: '227', hex: 'E3', kind: 0, value: 227 },\n {\n key: 168,\n word: 'RightControl',\n dec: '228',\n hex: 'E4',\n kind: 0,\n value: 228,\n },\n { key: 169, word: 'RightShift', dec: '229', hex: 'E5', kind: 0, value: 229 },\n { key: 170, word: 'RightAlt', dec: '230', hex: 'E6', kind: 0, value: 230 },\n { key: 171, word: 'RightGUI', dec: '231', hex: 'E7', kind: 0, value: 231 },\n]\n\n/********************************************************************************\n * @brief: 获取 HID 键码映射(主键名 + 别名)\n * @return {*}\n ********************************************************************************/\nexport const getHIDCodeMapStr = () => {\n return hidKeyCode.reduce((map, curKey) => {\n // 主键名映射\n map.set(curKey.word, curKey)\n\n // 别名映射(包含组合形式)\n if (curKey.aliases && curKey.aliases.length > 0) {\n curKey.aliases.forEach(alias => {\n map.set(alias, curKey)\n })\n }\n\n return map\n }, new Map<string, (typeof hidKeyCode)[0]>())\n}\n\n/********************************************************************************\n * @brief: 获取 HID 键码映射(value 映射)\n * @return {*}\n ********************************************************************************/\nexport const getHIDCodeMapStrNum = () => {\n return hidKeyCode.reduce(\n (pre, cur) => pre.set(cur.value, cur),\n new Map<number, (typeof hidKeyCode)[0]>()\n )\n}\n","import { gzipSync, gunzipSync } from 'fflate'\r\n\r\n/********************************************************************************\r\n * @brief: gzip 压缩 JSON 数据(转成 Blob,适合导出)\r\n * @param {any} data\r\n * @return {*}\r\n ********************************************************************************/\r\nexport const compressJsonGzip = (data: any): Blob => {\r\n // 1. 紧凑 JSON\r\n const jsonStr = JSON.stringify(data)\r\n // 2. 转 Uint8Array\r\n const uint8Array = new TextEncoder().encode(jsonStr)\r\n // 关键:显式转成 Uint8Array<ArrayBuffer>\r\n const compressedArray = new Uint8Array(gzipSync(uint8Array))\r\n // 4. 转 Blob\r\n return new Blob([compressedArray], { type: 'application/gzip' })\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 解压 gzip 格式的 JSON 文件\r\n * @param {File} file\r\n * @return {*}\r\n ********************************************************************************/\r\nexport const decompressJsonGzip = async (file: File): Promise<any> => {\r\n // 1. 读取文件\r\n const arrayBuffer = await file.arrayBuffer()\r\n // 2. gzip 解压(同步)\r\n const decompressedArray = gunzipSync(new Uint8Array(arrayBuffer))\r\n // 3. 转字符串并解析 JSON\r\n const jsonStr = new TextDecoder().decode(decompressedArray)\r\n return JSON.parse(jsonStr)\r\n}\r\n","\r\n/********************************************************************************\r\n * @brief: 判断 popover 是否显示\r\n * @param {string} popId\r\n * @return {*}\r\n ********************************************************************************/\r\nexport function isShowPopover(popId: string) {\r\n const box = document.getElementById(popId) // 1. 先拿元素\r\n const isShow =\r\n box &&\r\n window.getComputedStyle(box).display !== 'none' &&\r\n box.getAttribute('aria-hidden') !== 'true'\r\n return isShow\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 判断图片是否有效\r\n * @param {string} src\r\n * @return {*}\r\n ********************************************************************************/\r\nexport function isImageValid(src: string | File) {\r\n return new Promise(resolve => {\r\n const img = new Image()\r\n img.src = typeof src === 'string' ? src : URL.createObjectURL(src)\r\n img.onload = () => resolve(true)\r\n img.onerror = () => resolve(false)\r\n })\r\n}\r\n","import type { Result } from './interface/result.types'\r\n\r\n/********************************************************************************\r\n * @brief: 创建成功的结果对象\r\n * @param {T} data 业务数据(可选,默认 null)\r\n * @param {string} message 成功信息(可选,默认空字符串)\r\n * @param {number} code 成功状态码(可选,默认 0)\r\n * @return {*} 成功的 Result 对象\r\n ********************************************************************************/\r\nexport function successResult<T = unknown>(\r\n data: T = null as unknown as T,\r\n message: string = '',\r\n code: number = 0,\r\n): Result<T> {\r\n return {\r\n success: true,\r\n code,\r\n message,\r\n data,\r\n }\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 创建失败的结果对象\r\n * @param {string} message 错误信息(必选)\r\n * @param {number} code 错误码(可选,默认 -1)\r\n * @param {T} data 错误相关数据(可选,默认 null)\r\n * @return {*} 失败的 Result 对象\r\n ********************************************************************************/\r\nexport function errorResult<T = unknown>(\r\n message: string,\r\n code: number = -1,\r\n data: T = null as unknown as T,\r\n): Result<T> {\r\n return {\r\n success: false,\r\n code,\r\n message,\r\n data,\r\n }\r\n}\r\n","/********************************************************************************\r\n * @brief: 字节序枚举(大端/小端)\r\n * @return {*}\r\n ********************************************************************************/\r\nexport const Endianness = {\r\n LITTLE: 'little', // 小端(低字节在前)\r\n BIG: 'big', // 大端(高字节在前)\r\n}\r\n\r\nexport type Endianness = (typeof Endianness)[keyof typeof Endianness]\r\n\r\n/********************************************************************************\r\n * @brief: 将数字转换为指定字节序的字节数组\r\n * @param {number} number 待转换的数字(自动截断为无符号整数)\r\n * @param {number} byteCount 目标字节长度(必须为正整数)\r\n * @param {Endianness} endian 字节序(默认小端)\r\n * @return {*} 字节数组(每个元素为 0-255 的整数)\r\n ********************************************************************************/\r\nexport const numToBytes = (\r\n number: number,\r\n byteCount: number,\r\n endian: Endianness = Endianness.BIG,\r\n): number[] => {\r\n if (!Number.isInteger(byteCount) || byteCount <= 0) {\r\n throw new Error('Byte count must be a positive integer.')\r\n }\r\n\r\n const unsignedNum = number >>> 0 // 转为无符号整数\r\n const byteArray: number[] = new Array(byteCount)\r\n\r\n for (let i = 0; i < byteCount; i++) {\r\n // 根据字节序计算位移:小端用 i*8,大端用 (byteCount-1 - i)*8\r\n const shift = endian === Endianness.LITTLE ? i * 8 : (byteCount - 1 - i) * 8\r\n byteArray[i] = (unsignedNum >> shift) & 0xff\r\n }\r\n\r\n return byteArray\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 将任意长度的字节数组转换为数字(支持不同字节序)\r\n * @param {number[]} bytes 字节数组\r\n * @param {Endianness} endian 字节序(默认小端)\r\n * @return {*} 转换后的数字\r\n ********************************************************************************/\r\nexport const bytesToNum = (\r\n bytes: number[],\r\n endian: Endianness = Endianness.BIG,\r\n): number => {\r\n let result = 0\r\n\r\n if (endian === Endianness.LITTLE) {\r\n // 小端:从低位到高位\r\n for (let i = 0; i < bytes.length; i++) {\r\n // 根据字节序计算位移:小端用 i*8,大端用 (byteCount-1 - i)*8\r\n result |= (bytes[i] & 0xff) << (i * 8)\r\n }\r\n } else {\r\n // 大端:从高位到低位\r\n for (let i = 0; i < bytes.length; i++) {\r\n result |= (bytes[i] & 0xff) << ((bytes.length - 1 - i) * 8)\r\n }\r\n }\r\n\r\n return result\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 将数字转换为16位无符号整数的指定字节序字节数组(固定2字节)\r\n * @param {number} number 待转换的数字(自动截断为16位无符号整数范围)\r\n * @param {Endianness} endian 字节序(默认小端)\r\n * @return {*} 长度为2的字节数组\r\n ********************************************************************************/\r\nexport const numToBits16 = (\r\n number: number,\r\n endian: Endianness = Endianness.BIG,\r\n): [number, number] => {\r\n const uint16 = number & 0xffff // 截断为16位无符号整数\r\n\r\n if (endian === Endianness.LITTLE) {\r\n return [uint16 & 0xff, (uint16 >> 8) & 0xff] // 小端:[低8位, 高8位]\r\n } else {\r\n return [(uint16 >> 8) & 0xff, uint16 & 0xff] // 大端:[高8位, 低8位]\r\n }\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 将16位字节数组转换为数字(与numTo16Bits相反功能)\r\n * @param {[number, number]} bytes 长度为2的字节数组\r\n * @param {Endianness} endian 字节序(默认小端)\r\n * @return {*} 转换后的数字\r\n ********************************************************************************/\r\nexport const bits16ToNum = (\r\n bytes: [number, number],\r\n endian: Endianness = Endianness.BIG,\r\n): number => {\r\n if (bytes.length !== 2) {\r\n throw new Error('Input array must have exactly 2 elements')\r\n }\r\n\r\n if (endian === Endianness.LITTLE) {\r\n // 小端:[低8位, 高8位]\r\n return (bytes[1] << 8) | bytes[0]\r\n } else {\r\n // 大端:[高8位, 低8位]\r\n return (bytes[0] << 8) | bytes[1]\r\n }\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 将数字转换为ASCII码值数组(每个数字转换为其对应的ASCII码)\r\n * @param {number} n 待转换的数字(自动取绝对值)\r\n * @return {*} ASCII码值数组(每个元素为0-255的整数)\r\n ********************************************************************************/\r\nexport const numToAsciiArr = (n: number): number[] => {\r\n return Math.abs(n) // 去符号\r\n .toString() // 变成 \"12345\"\r\n .split('') // [\"1\",\"2\",\"3\",\"4\",\"5\"]\r\n .map(c => c.charCodeAt(0)) // [49,50,51,52,53]\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 将ASCII码值数组转换为对应的数字\r\n * @param {number[]} ascii\r\n * @return {*}\r\n ********************************************************************************/\r\nexport const asciiArrToNum = (ascii: number[]): number => {\r\n return Number(String.fromCharCode(...ascii))\r\n}\r\n","import type {\r\n ParsedColor,\r\n ParsedHSL,\r\n ParsedHSLA,\r\n ParsedRGB,\r\n ParsedRGBA,\r\n ParsedHSV,\r\n} from './interface/color.types'\r\n\r\n/********************************************************************************\r\n * @brief: 限制数值在指定范围内\r\n * @param {number} value\r\n * @param {number} min\r\n * @param {number} max\r\n * @return {*}\r\n ********************************************************************************/\r\nconst clamp = (value: number, min: number, max: number): number => {\r\n return Math.min(Math.max(value, min), max)\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 解析颜色字符串(支持 rgb/rgba/hsv/hsl 格式)\r\n * @param {string} str 待解析的颜色字符串(如 \"hsl(120, 100%, 50%)\"、\"hsla(240, 50%, 70%, 0.8)\")\r\n * @return {*} 解析后的颜色对象,不匹配任何格式时返回 null\r\n ********************************************************************************/\r\nexport function parseColorString(str: string): ParsedColor | null {\r\n /********************************************************************************\r\n * @brief: 工具函数:将百分比/数字转换为 0-255 的 RGB 分量\r\n * @param {string} valueStr\r\n * @return {*}\r\n ********************************************************************************/\r\n const toRgbComponent = (valueStr: string): number => {\r\n const isPercent = valueStr.endsWith('%')\r\n const value = parseFloat(valueStr.replace('%', ''))\r\n\r\n if (isPercent) {\r\n // 百分比转换(0%-100% → 0-255)\r\n return Math.round(clamp(value / 100, 0, 1) * 255)\r\n } else {\r\n // 直接数字(0-255)\r\n return clamp(Math.round(value), 0, 255)\r\n }\r\n }\r\n\r\n /********************************************************************************\r\n * @brief: 工具函数:将百分比/数字转换为 0-1 的 Alpha 分量\r\n * @param {string} valueStr\r\n * @return {*}\r\n ********************************************************************************/\r\n const toAlphaComponent = (valueStr: string): number => {\r\n const isPercent = valueStr.endsWith('%')\r\n const value = parseFloat(valueStr.replace('%', ''))\r\n\r\n if (isPercent) {\r\n return clamp(value / 100, 0, 1)\r\n } else {\r\n return clamp(value, 0, 1)\r\n }\r\n }\r\n\r\n /********************************************************************************\r\n * @brief: 工具函数:将百分比转换为 0-1 的 HSV/HSL 分量(饱和度/明度/亮度)\r\n * @param {string} valueStr\r\n * @return {*}\r\n ********************************************************************************/\r\n const toPercentComponent = (valueStr: string): number => {\r\n if (!valueStr.endsWith('%')) return 0 // 无效格式默认0\r\n const value = parseFloat(valueStr.replace('%', ''))\r\n return clamp(value / 100, 0, 1)\r\n }\r\n\r\n // 1. 匹配 rgb(...) 格式\r\n const rgbRegex =\r\n /^rgb\\(\\s*(\\d+(\\.\\d+)?%?)\\s*,\\s*(\\d+(\\.\\d+)?%?)\\s*,\\s*(\\d+(\\.\\d+)?%?)\\s*\\)$/i\r\n const rgbMatch = str.match(rgbRegex)\r\n if (rgbMatch) {\r\n const [, rStr, , gStr, , bStr] = rgbMatch\r\n return {\r\n type: 'rgb',\r\n r: toRgbComponent(rStr),\r\n g: toRgbComponent(gStr),\r\n b: toRgbComponent(bStr),\r\n }\r\n }\r\n\r\n // 2. 匹配 rgba(...) 格式\r\n const rgbaRegex =\r\n /^rgba\\(\\s*(\\d+(\\.\\d+)?%?)\\s*,\\s*(\\d+(\\.\\d+)?%?)\\s*,\\s*(\\d+(\\.\\d+)?%?)\\s*,\\s*(\\d+(\\.\\d+)?%?)\\s*\\)$/i\r\n const rgbaMatch = str.match(rgbaRegex)\r\n if (rgbaMatch) {\r\n const [, rStr, , gStr, , bStr, , aStr] = rgbaMatch\r\n return {\r\n type: 'rgba',\r\n r: toRgbComponent(rStr),\r\n g: toRgbComponent(gStr),\r\n b: toRgbComponent(bStr),\r\n a: toAlphaComponent(aStr),\r\n }\r\n }\r\n\r\n // 3. 匹配 hsv(...) 格式\r\n const hsvRegex =\r\n /^hsv\\(\\s*(\\d+(\\.\\d+)?)\\s*,\\s*(\\d+(\\.\\d+)?%)\\s*,\\s*(\\d+(\\.\\d+)?%)\\s*\\)$/i\r\n const hsvMatch = str.match(hsvRegex)\r\n if (hsvMatch) {\r\n const [, hStr, , sStr, , vStr] = hsvMatch\r\n return {\r\n type: 'hsv',\r\n h: clamp(parseFloat(hStr), 0, 360),\r\n s: toPercentComponent(sStr),\r\n v: toPercentComponent(vStr),\r\n }\r\n }\r\n\r\n // 4. 匹配 hsl(...) 格式(新增)\r\n const hslRegex =\r\n /^hsl\\(\\s*(\\d+(\\.\\d+)?)\\s*,\\s*(\\d+(\\.\\d+)?%)\\s*,\\s*(\\d+(\\.\\d+)?%)\\s*\\)$/i\r\n const hslMatch = str.match(hslRegex)\r\n if (hslMatch) {\r\n const [, hStr, , sStr, , lStr] = hslMatch\r\n return {\r\n type: 'hsl',\r\n h: clamp(parseFloat(hStr), 0, 360), // 色相 0-360\r\n s: toPercentComponent(sStr), // 饱和度 0-1\r\n l: toPercentComponent(lStr), // 明度 0-1\r\n }\r\n }\r\n\r\n // 5. 匹配 hsla(...) 格式(带透明度,新增)\r\n const hslaRegex =\r\n /^hsla\\(\\s*(\\d+(\\.\\d+)?)\\s*,\\s*(\\d+(\\.\\d+)?%)\\s*,\\s*(\\d+(\\.\\d+)?%)\\s*,\\s*(\\d+(\\.\\d+)?%?)\\s*\\)$/i\r\n const hslaMatch = str.match(hslaRegex)\r\n if (hslaMatch) {\r\n const [, hStr, , sStr, , lStr, , aStr] = hslaMatch\r\n return {\r\n type: 'hsla',\r\n h: clamp(parseFloat(hStr), 0, 360),\r\n s: toPercentComponent(sStr),\r\n l: toPercentComponent(lStr),\r\n a: toAlphaComponent(aStr), // 透明度 0-1\r\n }\r\n }\r\n\r\n // 不匹配任何格式\r\n return null\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: HSL 转 RGB 颜色转换\r\n * @param {ParsedColor} hsl HSL 颜色对象(分量范围 0-255)\r\n * @return {*} RGB 颜色对象(分量范围 0-255)\r\n ********************************************************************************/\r\nexport function hslToRgb(\r\n hsl: ParsedHSL | ParsedHSLA | null,\r\n): ParsedColor | null {\r\n // 输入边界处理\r\n const h = clamp(hsl.h, 0, 360) / 360 // 归一化色相到 0-1\r\n const s = clamp(hsl.s, 0, 1)\r\n const l = clamp(hsl.l, 0, 1)\r\n\r\n let r = 0,\r\n g = 0,\r\n b = 0\r\n\r\n if (s === 0) {\r\n // 无饱和度(灰度)\r\n r = g = b = l\r\n } else {\r\n // 辅助函数:计算颜色分量\r\n const hue2rgb = (p: number, q: number, t: number): number => {\r\n if (t < 0) t += 1\r\n if (t > 1) t -= 1\r\n if (t < 1 / 6) return p + (q - p) * 6 * t\r\n if (t < 1 / 2) return q\r\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6\r\n return p\r\n }\r\n\r\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s\r\n const p = 2 * l - q\r\n\r\n r = hue2rgb(p, q, h + 1 / 3)\r\n g = hue2rgb(p, q, h)\r\n b = hue2rgb(p, q, h - 1 / 3)\r\n }\r\n\r\n // 转换为 0-255 范围并取整\r\n return {\r\n type: 'rgb',\r\n r: Math.round(r * 255),\r\n g: Math.round(g * 255),\r\n b: Math.round(b * 255),\r\n }\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: RGB 转 HSL 颜色转换\r\n * @param {ParsedColor} rgb RGB 颜色对象(分量范围 0-255)\r\n * @return {*} HSL 颜色对象(h:0-360, s:0-1, l:0-1)\r\n ********************************************************************************/\r\nexport function rgbToHsl(\r\n rgb: ParsedRGB | ParsedRGBA | null,\r\n): ParsedColor | null {\r\n // 1. 输入处理:将 RGB 分量归一化到 0-1 范围\r\n const r = clamp(rgb.r, 0, 255) / 255\r\n const g = clamp(rgb.g, 0, 255) / 255\r\n const b = clamp(rgb.b, 0, 255) / 255\r\n\r\n // 2. 计算最大/最小分量值\r\n const max = Math.max(r, g, b)\r\n const min = Math.min(r, g, b)\r\n const delta = max - min // 颜色范围(用于计算饱和度)\r\n\r\n // 3. 计算明度(Lightness)\r\n const l = (max + min) / 2\r\n\r\n // 4. 计算饱和度(Saturation)\r\n let s = 0\r\n if (delta !== 0) {\r\n // 饱和度公式:根据明度调整计算方式\r\n s = delta / (1 - Math.abs(2 * l - 1))\r\n }\r\n\r\n // 5. 计算色相(Hue)\r\n let h = 0\r\n if (delta !== 0) {\r\n switch (max) {\r\n case r:\r\n // 红色为最大分量时,色相基于 g - b 计算\r\n h = ((g - b) / delta) % 6\r\n break\r\n case g:\r\n // 绿色为最大分量时,色相基于 b - r 计算\r\n h = (b - r) / delta + 2\r\n break\r\n case b:\r\n // 蓝色为最大分量时,色相基于 r - g 计算\r\n h = (r - g) / delta + 4\r\n break\r\n }\r\n // 转换为 0-360 度(若为负数则加 360 确保在正数范围)\r\n h = Math.round(h * 60)\r\n if (h < 0) h += 360\r\n }\r\n\r\n // 6. 输出处理:确保饱和度和明度在 0-1 范围内\r\n return {\r\n type: 'hsl',\r\n h: clamp(h, 0, 360),\r\n s: clamp(s, 0, 1),\r\n l: clamp(l, 0, 1),\r\n }\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: HSV 转 HSL 颜色转换\r\n * @param {ParsedColor} hsv HSV 颜色对象(分量范围 0-255)\r\n * @return {*} HSL 颜色对象(h:0-360, s:0-1, l:0-1)\r\n ********************************************************************************/\r\nexport function hsvToHsl(hsv: ParsedHSV): ParsedColor {\r\n const { h, s: sHsv, v } = hsv\r\n\r\n // 计算HSL的亮度(L)\r\n let l: number\r\n if (sHsv === 0) {\r\n // 饱和度为0时,亮度等于明度(灰度)\r\n l = v\r\n } else {\r\n l = ((2 - sHsv) * v) / 2\r\n }\r\n // 确保亮度在0-1范围内\r\n l = Math.max(0, Math.min(1, l))\r\n\r\n // 计算HSL的饱和度(S)\r\n let s: number\r\n if (l === 0 || l === 1) {\r\n // 纯黑或纯白时饱和度为0\r\n s = 0\r\n } else {\r\n s = (sHsv * v) / (1 - Math.abs(2 * l - 1))\r\n // 确保饱和度在0-1范围内\r\n s = Math.max(0, Math.min(1, s))\r\n }\r\n\r\n return {\r\n type: 'hsl',\r\n h: Math.max(0, Math.min(360, h)), // 确保色相在0-360范围内\r\n s,\r\n l,\r\n }\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: HSL 转 HSV 颜色转换\r\n * @param {ParsedColor} hsl HSL 颜色对象(分量范围 0-255)\r\n * @return {*} HSV 颜色对象(h:0-360, s:0-1, v:0-1)\r\n ********************************************************************************/\r\nexport function hslToHsv(hsl: ParsedHSL): ParsedColor {\r\n const { h, s: sHsl, l } = hsl\r\n\r\n // 计算HSV的明度(V)\r\n const v = l + sHsl * Math.min(l, 1 - l)\r\n // 确保明度在0-1范围内\r\n const clampedV = Math.max(0, Math.min(1, v))\r\n\r\n // 计算HSV的饱和度(S)\r\n let s: number\r\n if (clampedV === 0) {\r\n // 明度为0时饱和度为0(纯黑)\r\n s = 0\r\n } else {\r\n s = 2 * (1 - l / clampedV)\r\n // 确保饱和度在0-1范围内\r\n s = Math.max(0, Math.min(1, s))\r\n }\r\n\r\n return {\r\n type: 'hsv',\r\n h: Math.max(0, Math.min(360, h)), // 确保色相在0-360范围内\r\n s,\r\n v: clampedV,\r\n }\r\n}\r\n","/********************************************************************************\r\n * @file: logger.ts\r\n * @brief: 可开关的Console日志工具函数封装(兼容CJS/ESM双环境)\r\n * @desc: 支持开发/生产环境自动切换日志输出,可保留关键错误日志,支持动态配置开关\r\n * @note: 移除import.meta依赖,兼容CommonJS/ESModule双模块格式\r\n ********************************************************************************/\r\nimport type { ConsoleType, LoggerConfig } from './interface/debug.types'\r\n\r\ndeclare global {\r\n /**\r\n * @brief: 扩展Window接口,添加自定义环境变量属性__ENV__\r\n * @desc: 解决TS2339错误:Property '__ENV__' does not exist on type 'Window'\r\n */\r\n interface Window {\r\n __ENV__?: {\r\n MODE: 'development' | 'production' | string // 环境模式(开发/生产)\r\n }\r\n }\r\n}\r\n\r\n// ===================== 环境判断(兼容CJS/ESM双环境) =====================\r\n/**\r\n * @brief: 判断当前是否为浏览器环境\r\n * @return {boolean} true=浏览器环境,false=Node.js环境\r\n */\r\nconst isBrowser = typeof window !== 'undefined'\r\n\r\n/********************************************************************************\r\n * @brief: 判断当前是否为开发环境(兼容CJS/ESM)\r\n * @desc: 优先读取process.env(CJS),兜底读取window环境变量(浏览器ESM)\r\n * @return {boolean} true=开发环境,false=生产环境\r\n ********************************************************************************/\r\nconst isDevelopmentEnv = (): boolean => {\r\n // 1. Node.js/CJS环境:读取process.env(Webpack/Node/TSC编译后)\r\n if (typeof process !== 'undefined' && process.env?.NODE_ENV) {\r\n return process.env.NODE_ENV === 'development'\r\n }\r\n\r\n // 2. 浏览器ESM环境(无process):读取window上的环境变量(需构建工具注入)\r\n if (isBrowser && window.__ENV__?.MODE) {\r\n return window.__ENV__.MODE === 'development'\r\n }\r\n\r\n // 3. 兜底逻辑:未检测到环境变量时,默认视为开发环境\r\n return true\r\n}\r\n\r\n// ===================== 核心配置 =====================\r\n/**\r\n * @brief: 日志工具默认配置\r\n * @desc: 开发环境开启所有日志,生产环境仅保留error类型日志\r\n */\r\nconst DEFAULT_LOGGER_CONFIG: LoggerConfig = {\r\n enable: isDevelopmentEnv(),\r\n reserveTypes: ['error'],\r\n prefix: '[iLx1-tool]',\r\n}\r\n\r\n// 全局配置(支持动态修改)\r\nlet loggerConfig: LoggerConfig = { ...DEFAULT_LOGGER_CONFIG }\r\n\r\n// ===================== 辅助函数 =====================\r\n/********************************************************************************\r\n * @brief: 判断指定类型的日志是否允许输出\r\n * @param {ConsoleType} type 日志类型(log/info/warn/error/debug)\r\n * @return {boolean} true=允许输出,false=禁止输出\r\n ********************************************************************************/\r\nconst isLogEnabled = (type: ConsoleType): boolean => {\r\n // 开启调试模式 → 允许所有类型输出\r\n if (loggerConfig.enable) {\r\n return true\r\n }\r\n // 关闭调试模式 → 仅允许保留类型输出\r\n return loggerConfig.reserveTypes.includes(type)\r\n}\r\n\r\n// ===================== 核心日志函数封装 =====================\r\n/********************************************************************************\r\n * @brief: 封装console.log方法(可开关控制)\r\n * @param {any[]} args 日志打印参数(任意数量、任意类型)\r\n * @return {void} 无返回值\r\n ********************************************************************************/\r\nexport const log = (...args: any[]): void => {\r\n if (isLogEnabled('log')) {\r\n console.log(`${loggerConfig.prefix} [LOG]`, ...args)\r\n }\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 封装console.info方法(可开关控制)\r\n * @param {any[]} args 日志打印参数(任意数量、任意类型)\r\n * @return {void} 无返回值\r\n ********************************************************************************/\r\nexport const info = (...args: any[]): void => {\r\n if (isLogEnabled('info')) {\r\n console.info(`${loggerConfig.prefix} [INFO]`, ...args)\r\n }\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 封装console.warn方法(可开关控制)\r\n * @param {any[]} args 日志打印参数(任意数量、任意类型)\r\n * @return {void} 无返回值\r\n ********************************************************************************/\r\nexport const warn = (...args: any[]): void => {\r\n if (isLogEnabled('warn')) {\r\n console.warn(`${loggerConfig.prefix} [WARN]`, ...args)\r\n }\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 封装console.error方法(可开关控制,默认生产环境保留)\r\n * @param {any[]} args 日志打印参数(任意数量、任意类型)\r\n * @return {void} 无返回值\r\n ********************************************************************************/\r\nexport const error = (...args: any[]): void => {\r\n if (isLogEnabled('error')) {\r\n console.error(`${loggerConfig.prefix} [ERROR]`, ...args)\r\n }\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 封装console.debug方法(可开关控制)\r\n * @param {any[]} args 日志打印参数(任意数量、任意类型)\r\n * @return {void} 无返回值\r\n ********************************************************************************/\r\nexport const debug = (...args: any[]): void => {\r\n if (isLogEnabled('debug')) {\r\n console.debug(`${loggerConfig.prefix} [DEBUG]`, ...args)\r\n }\r\n}\r\n\r\n// ===================== 配置控制函数 =====================\r\n/********************************************************************************\r\n * @brief: 动态修改日志工具配置\r\n * @param {Partial<LoggerConfig>} config 要修改的配置项(可选,无需传全部)\r\n * @return {void} 无返回值\r\n * @example:\r\n * setLoggerConfig({ enable: false }); // 全局关闭所有日志\r\n * setLoggerConfig({ reserveTypes: ['error', 'warn'] }); // 保留错误和警告日志\r\n ********************************************************************************/\r\nexport const setLoggerConfig = (config: Partial<LoggerConfig>): void => {\r\n loggerConfig = { ...loggerConfig, ...config }\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 重置日志工具配置为默认值\r\n * @return {void} 无返回值\r\n ********************************************************************************/\r\nexport const resetLoggerConfig = (): void => {\r\n loggerConfig = { ...DEFAULT_LOGGER_CONFIG }\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 强制开启所有日志(临时调试用)\r\n * @return {void} 无返回值\r\n ********************************************************************************/\r\nexport const enableAllLogs = (): void => {\r\n setLoggerConfig({\r\n enable: true,\r\n reserveTypes: ['log', 'info', 'warn', 'error', 'debug'],\r\n })\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 强制关闭所有日志(紧急生产环境用)\r\n * @return {void} 无返回值\r\n ********************************************************************************/\r\nexport const disableAllLogs = (): void => {\r\n setLoggerConfig({ enable: false, reserveTypes: [] })\r\n}\r\n","import Konva from 'konva'\r\n\r\n/********************************************************************************\r\n * @brief: 图像处理工具函数库主对象\r\n * @param: 无\r\n * @return: ImageToHexArray 对象\r\n ********************************************************************************/\r\nexport const ImageToHexArray = {\r\n /********************************************************************************\r\n * @brief: 生成十六进制数组\r\n * @param {string} picData - base64图像数据\r\n * @param {number} thresholdData - 阈值\r\n * @param {Array} config - 配置数组\r\n * @return {Promise<Array|Uint8Array>} 十六进制数组\r\n ********************************************************************************/\r\n generate: async function (\r\n picData: string,\r\n thresholdData: number,\r\n config: number[],\r\n ): Promise<Uint8Array> {\r\n try {\r\n const picImageData = await this.base64ToImageData(picData)\r\n const bufferData = this.imageDataToHexArray(\r\n picImageData,\r\n thresholdData,\r\n config,\r\n )\r\n\r\n return config[3] === 0\r\n ? this.hex2hex(this.arrayToHex(bufferData))\r\n : bufferData\r\n } catch (error) {\r\n console.error('生成十六进制数组时出错:', error)\r\n throw error\r\n }\r\n },\r\n\r\n /********************************************************************************\r\n * @brief: ImageData 对象转 hexArray\r\n * @param {ImageData} imageData - 图像数据对象\r\n * @param {number} threshold - 阈值\r\n * @param {Array} config - 配置数组\r\n * @return {Uint8Array} 处理后的字节数组\r\n ********************************************************************************/\r\n imageDataToHexArray: function (\r\n imageData: ImageData,\r\n threshold: number,\r\n config: number[],\r\n ): Uint8Array {\r\n const pixels = imageData.data\r\n const height = imageData.height\r\n const width = imageData.width\r\n const pixelsLen = pixels.length\r\n\r\n // 单色图片取模\r\n if (config[4] == 1) {\r\n const unpackedBuffer = []\r\n const depth = 4\r\n\r\n for (let i = 0; i < pixelsLen; i += depth) {\r\n // 灰度值计算 (使用加权平均)\r\n const grayValue =\r\n pixels[i] * 0.299 + pixels[i + 1] * 0.587 + pixels[i + 2] * 0.114\r\n const pixelVal = grayValue > threshold ? 1 : 0\r\n unpackedBuffer[i / depth] = pixelVal\r\n }\r\n\r\n // 根据配置选择取模函数\r\n const samplingMode = config[1]\r\n let samplingFunction\r\n\r\n switch (samplingMode) {\r\n case 0:\r\n samplingFunction = this.ImageSamplingRow\r\n break\r\n case 1:\r\n samplingFunction = this.ImageSamplingCol\r\n break\r\n case 2:\r\n samplingFunction = this.ImageSamplingColRow\r\n break\r\n case 3:\r\n samplingFunction = this.ImageSamplingRowCol\r\n break\r\n default:\r\n samplingFunction = this.ImageSamplingRow\r\n }\r\n\r\n if (typeof samplingFunction !== 'function') {\r\n throw new Error(`取模函数未定义,samplingMode: ${samplingMode}`)\r\n }\r\n\r\n return samplingFunction.call(this, unpackedBuffer, width, height, config)\r\n } else {\r\n // 彩色图片取模\r\n return this.colorImageSampling(pixels, width, height, config)\r\n }\r\n },\r\n\r\n /********************************************************************************\r\n * @brief: 彩色图像取模 (RGB565格式)\r\n * @param {Uint8ClampedArray} pixels - 像素数组\r\n * @param {number} width - 图像宽度\r\n * @param {number} height - 图像高度\r\n * @param {Array} config - 配置数组\r\n * @return {Uint8Array} RGB565格式的字节数组\r\n ********************************************************************************/\r\n colorImageSampling: function (\r\n pixels: Uint8ClampedArray,\r\n width: number,\r\n height: number,\r\n config: number[],\r\n ): Uint8Array {\r\n const buffer = new Uint8Array(width * height * 2)\r\n let i = 0,\r\n j = 0\r\n\r\n while (i < buffer.length && j < pixels.length) {\r\n // 提取RGB分量\r\n const r = pixels[j]\r\n const g = pixels[j + 1]\r\n const b = pixels[j + 2]\r\n\r\n // RGB565 格式转换 (5位红,6位绿,5位蓝)\r\n const r5 = (r >> 3) & 0x1f // 5位红色\r\n const g6 = (g >> 2) & 0x3f // 6位绿色\r\n const b5 = (b >> 3) & 0x1f // 5位蓝色\r\n\r\n // 组合为16位颜色: RRRRRGGGGGGBBBBB\r\n const color = (r5 << 11) | (g6 << 5) | b5\r\n\r\n // 拆分为两个字节\r\n buffer[i] = (color >> 8) & 0xff // 高字节\r\n buffer[i + 1] = color & 0xff // 低字节\r\n\r\n // 反转处理 (如果需要)\r\n if (config[0] == 0 || config[2] == 1) {\r\n buffer[i] = ~buffer[i] & 0xff\r\n buffer[i + 1] = ~buffer[i + 1] & 0xff\r\n }\r\n\r\n i += 2\r\n j += 4 // 跳过alpha通道\r\n }\r\n\r\n return buffer\r\n },\r\n\r\n /********************************************************************************\r\n * @brief: 逐行式取模 (从左到右,从上到下)\r\n * @param {Array} unpackedBuffer - 解压后的像素缓冲区\r\n * @param {number} width - 图像宽度\r\n * @param {number} height - 图像高度\r\n * @param {Array} config - 配置数组\r\n * @return {Uint8Array} 取模后的字节数组\r\n ********************************************************************************/\r\n ImageSamplingRow: function (\r\n unpackedBuffer: number[],\r\n width: number,\r\n height: number,\r\n config: number[],\r\n ): Uint8Array {\r\n const bytesPerRow = Math.ceil(width / 8)\r\n const buffer = new Uint8Array(bytesPerRow * height)\r\n\r\n for (let i = 0; i < unpackedBuffer.length; i++) {\r\n const x = i % width\r\n const y = Math.floor(i / width)\r\n\r\n // 确定取模的 page (每行是一个page)\r\n const page = y\r\n\r\n // 确定位偏移\r\n const bitOffset = x % 8\r\n let pageShift = 1 << bitOffset\r\n\r\n // 反转位序 (如果需要)\r\n if (config[2] != 0) {\r\n pageShift = 1 << (7 - bitOffset)\r\n }\r\n\r\n // 计算字节位置\r\n const bytePos = page * bytesPerRow + Math.floor(x / 8)\r\n\r\n // 像素值处理 (反转颜色如果需要)\r\n let pixelVal = unpackedBuffer[i]\r\n if (config[0] !== 0) {\r\n pixelVal = pixelVal === 0 ? 1 : 0\r\n }\r\n\r\n // 设置位\r\n if (pixelVal === 0) {\r\n buffer[bytePos] |= pageShift\r\n } else {\r\n buffer[bytePos] &= ~pageShift\r\n }\r\n }\r\n\r\n return buffer\r\n },\r\n\r\n /********************************************************************************\r\n * @brief: 逐列式取模 (从上到下,从左到右)\r\n * @param {Array} unpackedBuffer - 解压后的像素缓冲区\r\n * @param {number} width - 图像宽度\r\n * @param {number} height - 图像高度\r\n * @param {Array} config - 配置数组\r\n * @return {Uint8Array} 取模后的字节数组\r\n ********************************************************************************/\r\n ImageSamplingCol: function (\r\n unpackedBuffer: number[],\r\n width: number,\r\n height: number,\r\n config: number[],\r\n ): Uint8Array {\r\n const bytesPerCol = Math.ceil(height / 8)\r\n const buffer = new Uint8Array(bytesPerCol * width)\r\n\r\n for (let i = 0; i < unpackedBuffer.length; i++) {\r\n const x = i % width\r\n const y = Math.floor(i / width)\r\n\r\n // 确定取模的 page (每列是一个page)\r\n const page = x\r\n\r\n // 确定位偏移\r\n const bitOffset = y % 8\r\n let pageShift = 1 << bitOffset\r\n\r\n // 反转位序 (如果需要)\r\n if (config[2] != 0) {\r\n pageShift = 1 << (7 - bitOffset)\r\n }\r\n\r\n // 计算字节位置\r\n const bytePos = page * bytesPerCol + Math.floor(y / 8)\r\n\r\n // 像素值处理 (反转颜色如果需要)\r\n let pixelVal = unpackedBuffer[i]\r\n if (config[0] !== 0) {\r\n pixelVal = pixelVal === 0 ? 1 : 0\r\n }\r\n\r\n // 设置位\r\n if (pixelVal === 0) {\r\n buffer[bytePos] |= pageShift\r\n } else {\r\n buffer[bytePos] &= ~pageShift\r\n }\r\n }\r\n\r\n return buffer\r\n },\r\n\r\n /********************************************************************************\r\n * @brief: 列行式取模 (先列后行)\r\n * @param {Array} unpackedBuffer - 解压后的像素缓冲区\r\n * @param {number} width - 图像宽度\r\n * @param {number} height - 图像高度\r\n * @param {Array} config - 配置数组\r\n * @return {Uint8Array} 取模后的字节数组\r\n ********************************************************************************/\r\n ImageSamplingColRow: function (\r\n unpackedBuffer: number[],\r\n width: number,\r\n height: number,\r\n config: number[],\r\n ): Uint8Array {\r\n const bytesPerCol = Math.ceil(height / 8)\r\n const buffer = new Uint8Array(bytesPerCol * width)\r\n\r\n for (let i = 0; i < unpackedBuffer.length; i++) {\r\n const x = i % width\r\n const y = Math.floor(i / width)\r\n\r\n // 确定取模的 page (每8行是一个page)\r\n const page = Math.floor(y / 8)\r\n\r\n // 确定位偏移\r\n const bitOffset = y % 8\r\n let pageShift = 1 << bitOffset\r\n\r\n // 反转位序 (如果需要)\r\n if (config[2] != 0) {\r\n pageShift = 1 << (7 - bitOffset)\r\n }\r\n\r\n // 计算字节位置\r\n const bytePos = x + page * width\r\n\r\n // 像素值处理 (反转颜色如果需要)\r\n let pixelVal = unpackedBuffer[i]\r\n if (config[0] !== 0) {\r\n pixelVal = pixelVal === 0 ? 1 : 0\r\n }\r\n\r\n // 设置位\r\n if (pixelVal === 0) {\r\n buffer[bytePos] |= pageShift\r\n } else {\r\n buffer[bytePos] &= ~pageShift\r\n }\r\n }\r\n\r\n return buffer\r\n },\r\n\r\n /********************************************************************************\r\n * @brief: 行列式取模 (先行后列)\r\n * @param {Array} unpackedBuffer - 解压后的像素缓冲区\r\n * @param {number} width - 图像宽度\r\n * @param {number} height - 图像高度\r\n * @param {Array} config - 配置数组\r\n * @return {Uint8Array} 取模后的字节数组\r\n ********************************************************************************/\r\n ImageSamplingRowCol: function (\r\n unpackedBuffer: number[],\r\n width: number,\r\n height: number,\r\n config: number[],\r\n ): Uint8Array {\r\n const bytesPerRow = Math.ceil(width / 8)\r\n const buffer = new Uint8Array(bytesPerRow * height)\r\n\r\n for (let i = 0; i < unpackedBuffer.length; i++) {\r\n const x = i % width\r\n const y = Math.floor(i / width)\r\n\r\n // 确定取模的 page (每8列是一个page)\r\n const page = Math.floor(x / 8)\r\n\r\n // 确定位偏移\r\n const bitOffset = x % 8\r\n let pageShift = 1 << bitOffset\r\n\r\n // 反转位序 (如果需要)\r\n if (config[2] != 0) {\r\n pageShift = 1 << (7 - bitOffset)\r\n }\r\n\r\n // 计算字节位置\r\n const bytePos = page * height + y\r\n\r\n // 像素值处理 (反转颜色如果需要)\r\n let pixelVal = unpackedBuffer[i]\r\n if (config[0] !== 0) {\r\n pixelVal = pixelVal === 0 ? 1 : 0\r\n }\r\n\r\n // 设置位\r\n if (pixelVal === 0) {\r\n buffer[bytePos] |= pageShift\r\n } else {\r\n buffer[bytePos] &= ~pageShift\r\n }\r\n }\r\n\r\n return buffer\r\n },\r\n\r\n /********************************************************************************\r\n * @brief: base64 转 ImageData 对象\r\n * @param {string} base64Data - base64编码的图像数据\r\n * @return {Promise<ImageData>} ImageData对象\r\n ********************************************************************************/\r\n base64ToImageData: function (base64Data: string): Promise<ImageData> {\r\n return new Promise((resolve, reject) => {\r\n const img = new Image()\r\n img.crossOrigin = 'anonymous'\r\n img.src = base64Data\r\n\r\n img.onload = () => {\r\n try {\r\n const canvas = document.createElement('canvas')\r\n canvas.width = img.width\r\n canvas.height = img.height\r\n\r\n const ctx = canvas.getContext('2d')\r\n ctx.drawImage(img, 0, 0)\r\n\r\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height)\r\n resolve(imageData)\r\n } catch (error) {\r\n reject(new Error(`转换图像数据失败: ${error.message}`))\r\n }\r\n }\r\n\r\n img.onerror = () => {\r\n reject(new Error('加载图像失败'))\r\n }\r\n\r\n img.src = base64Data\r\n })\r\n },\r\n\r\n /********************************************************************************\r\n * @brief: 使用 Konva.js 缩放图像\r\n * @param {number} width - 目标宽度\r\n * @param {number} height - 目标高度\r\n * @param {HTMLImageElement} image - 源图像对象\r\n * @param {boolean} colorMode - 是否转换为灰度\r\n * @return {Promise<string>} base64编码的缩放后图像\r\n ********************************************************************************/\r\n resizeImageWithKonva: async function (\r\n width: number,\r\n height: number,\r\n image: HTMLImageElement,\r\n colorMode: boolean,\r\n ): Promise<string> {\r\n if (width === 0 || height === 0) {\r\n throw new Error('宽度和高度不能为0')\r\n }\r\n\r\n if (!image) {\r\n throw new Error('图像对象不能为空')\r\n }\r\n\r\n return new Promise(resolve => {\r\n // 检查 Konva 是否可用\r\n if (typeof Konva === 'undefined') {\r\n // 如果 Konva 不可用,使用 Canvas API 替代\r\n this.resizeImageWithCanvas(width, height, image, colorMode)\r\n .then(resolve)\r\n .catch(() => {\r\n // 如果 Canvas 也失败,返回原始图像\r\n const canvas = document.createElement('canvas')\r\n canvas.width = image.width\r\n canvas.height = image.height\r\n const ctx = canvas.getContext('2d')\r\n ctx.drawImage(image, 0, 0)\r\n resolve(canvas.toDataURL('image/png'))\r\n })\r\n return\r\n }\r\n\r\n // 创建临时舞台\r\n const tempStage = new Konva.Stage({\r\n container: document.createElement('div'),\r\n width: width,\r\n height: height,\r\n })\r\n\r\n const tempLayer = new Konva.Layer()\r\n tempStage.add(tempLayer)\r\n\r\n // 创建图像节点\r\n const imageNode = new Konva.Image({\r\n image: image,\r\n width: width,\r\n height: height,\r\n })\r\n\r\n // 应用灰度滤镜(如果需要)\r\n if (colorMode) {\r\n imageNode.filters([Konva.Filters.Grayscale])\r\n }\r\n\r\n tempLayer.add(imageNode)\r\n tempLayer.batchDraw()\r\n\r\n // 获取 base64 数据\r\n const dataURL = tempStage.toDataURL({\r\n mimeType: 'image/png',\r\n quality: 1,\r\n pixelRatio: 1,\r\n })\r\n\r\n // 销毁临时舞台\r\n tempStage.destroy()\r\n\r\n resolve(dataURL)\r\n })\r\n },\r\n\r\n /********************************************************************************\r\n * @brief: 使用 Canvas API 缩放图像 (Konva不可用时的备选方案)\r\n * @param {number} width - 目标宽度\r\n * @param {number} height - 目标高度\r\n * @param {HTMLImageElement} image - 源图像对象\r\n * @param {boolean} colorMode - 是否转换为灰度\r\n * @return {Promise<string>} base64编码的缩放后图像\r\n ********************************************************************************/\r\n resizeImageWithCanvas: async function (width, height, image, colorMode) {\r\n return new Promise(resolve => {\r\n const canvas = document.createElement('canvas')\r\n canvas.width = width\r\n canvas.height = height\r\n\r\n const ctx = canvas.getContext('2d')\r\n\r\n // 设置高质量缩放\r\n ctx.imageSmoothingEnabled = true\r\n ctx.imageSmoothingQuality = 'high'\r\n\r\n // 绘制并缩放图像\r\n ctx.drawImage(image, 0, 0, width, height)\r\n\r\n // 灰度处理(如果需要)\r\n if (colorMode) {\r\n const imageData = ctx.getImageData(0, 0, width, height)\r\n const data = imageData.data\r\n\r\n for (let i = 0; i < data.length; i += 4) {\r\n // 计算灰度值\r\n const gray =\r\n data[i] * 0.299 + data[i + 1] * 0.587 + data[i + 2] * 0.114\r\n data[i] = data[i + 1] = data[i + 2] = gray\r\n }\r\n\r\n ctx.putImageData(imageData, 0, 0)\r\n }\r\n\r\n // 转换为base64\r\n const base64 = canvas.toDataURL('image/png')\r\n resolve(base64)\r\n })\r\n },\r\n\r\n /********************************************************************************\r\n * @brief: Uint8Array 转十六进制字符串\r\n * @param {Uint8Array} array - 字节数组\r\n * @return {string} 十六进制字符串\r\n ********************************************************************************/\r\n arrayToHex: function (array) {\r\n if (!array || array.length === 0) {\r\n return ''\r\n }\r\n\r\n return Array.from(array)\r\n .map(b => Number(b).toString(16).padStart(2, '0'))\r\n .join('')\r\n },\r\n\r\n /********************************************************************************\r\n * @brief: 十六进制数据加 '0x' 前缀\r\n * @param {string} hex - 十六进制字符串\r\n * @return {Array<string>} 带0x前缀的十六进制数组\r\n ********************************************************************************/\r\n hex2hex: function (hex: string): Array<string> {\r\n if (!hex || hex.length === 0) {\r\n return []\r\n }\r\n\r\n const bytes = []\r\n for (let c = 0; c < hex.length; c += 2) {\r\n bytes.push('0x' + hex.substring(c, c + 2))\r\n }\r\n return bytes\r\n },\r\n\r\n /********************************************************************************\r\n * @brief: 生成取模预览 (0=白点, 1=黑点)\r\n * @param {Uint8Array} unpackedBuffer - 解压后的像素缓冲区\r\n * @param {number} width - 图像宽度\r\n * @return {string} 预览字符串\r\n ********************************************************************************/\r\n generatePreview: function (\r\n unpackedBuffer: Uint8Array,\r\n width: number,\r\n ): string {\r\n if (!unpackedBuffer || unpackedBuffer.length === 0) {\r\n return ''\r\n }\r\n\r\n let preview = ''\r\n for (let i = 0; i < unpackedBuffer.length; i++) {\r\n preview += unpackedBuffer[i] === 0 ? '0' : '1'\r\n if ((i + 1) % width === 0) {\r\n preview += '\\n'\r\n }\r\n }\r\n return preview\r\n },\r\n\r\n /********************************************************************************\r\n * @brief: 创建图像数据对象(兼容性函数)\r\n * @param {number} width - 图像宽度\r\n * @param {number} height - 图像高度\r\n * @param {Uint8ClampedArray} data - 像素数据\r\n * @return {ImageData} ImageData对象\r\n ********************************************************************************/\r\n createImageData: function (\r\n width: number,\r\n height: number,\r\n data: Uint8ClampedArray = null,\r\n ) {\r\n const canvas = document.createElement('canvas')\r\n canvas.width = width\r\n canvas.height = height\r\n\r\n const ctx = canvas.getContext('2d')\r\n\r\n if (data) {\r\n const imageData = ctx.createImageData(width, height)\r\n imageData.data.set(data)\r\n return imageData\r\n } else {\r\n return ctx.createImageData(width, height)\r\n }\r\n },\r\n\r\n /********************************************************************************\r\n * @brief: 将字节数组格式化为可读字符串\r\n * @param {Uint8Array|Array} hexArray - 十六进制数组\r\n * @param {number} format - 输出格式 (0=带0x前缀, 1=原始数组)\r\n * @param {number} lineBreak - 每行显示的字节数\r\n * @return {string} 格式化后的字符串\r\n ********************************************************************************/\r\n formatHexOutput: function (\r\n hexArray: Uint8Array | Array<string>,\r\n format = 0,\r\n lineBreak = 16,\r\n ): string {\r\n if (!hexArray || hexArray.length === 0) {\r\n return '无数据'\r\n }\r\n\r\n let outputText = ''\r\n\r\n if (format === 0 && Array.isArray(hexArray)) {\r\n // 带0x前缀的格式\r\n for (let i = 0; i < hexArray.length; i++) {\r\n outputText += hexArray[i] + ', '\r\n if ((i + 1) % lineBreak === 0) {\r\n outputText += '\\n'\r\n }\r\n }\r\n } else if (hexArray instanceof Uint8Array) {\r\n // 原始数组格式\r\n for (let i = 0; i < hexArray.length; i++) {\r\n outputText += hexArray[i].toString(16).padStart(2, '0') + ' '\r\n if ((i + 1) % lineBreak === 0) {\r\n outputText += '\\n'\r\n }\r\n }\r\n } else {\r\n // 其他格式直接转换为字符串\r\n outputText = hexArray.toString()\r\n }\r\n\r\n return outputText\r\n },\r\n\r\n /********************************************************************************\r\n * @brief: 计算输出字节数\r\n * @param {Uint8Array|Array} hexArray - 十六进制数组\r\n * @return {Object} 包含字节数和KB数的对象\r\n ********************************************************************************/\r\n calculateOutputSize: function (hexArray: Uint8Array | Array<string>): {\r\n bytes: number\r\n kilobytes: number\r\n formatted: string\r\n } {\r\n let byteCount = 0\r\n\r\n if (Array.isArray(hexArray)) {\r\n byteCount = hexArray.length\r\n } else if (hexArray instanceof Uint8Array) {\r\n byteCount = hexArray.length\r\n }\r\n\r\n const kb = byteCount / 1024\r\n\r\n return {\r\n bytes: byteCount,\r\n kilobytes: kb,\r\n formatted: `${byteCount} 字节 (${kb.toFixed(2)} KB)`,\r\n }\r\n },\r\n\r\n /********************************************************************************\r\n * @brief: 获取取模方式描述\r\n * @param {number} mode - 取模方式代码\r\n * @return {string} 取模方式描述\r\n ********************************************************************************/\r\n getSamplingModeDescription: function (mode: number): string {\r\n const modes = {\r\n 0: '逐行式 (从左到右,从上到下)',\r\n 1: '逐列式 (从上到下,从左到右)',\r\n 2: '列行式 (先列后行)',\r\n 3: '行列式 (先行后列)',\r\n }\r\n\r\n return modes[mode] || '未知取模方式'\r\n },\r\n\r\n /********************************************************************************\r\n * @brief: 获取配置数组的默认值\r\n * @param: 无\r\n * @return {Array} 默认配置数组\r\n ********************************************************************************/\r\n getDefaultConfig: function (): number[] {\r\n return [\r\n 0, // 反转模式 (0=正常, 1=反转)\r\n 0, // 取模方式 (0=逐行式, 1=逐列式, 2=列行式, 3=行列式)\r\n 0, // 位顺序 (0=正常位序, 1=反转位序)\r\n 0, // 输出格式 (0=带0x前缀, 1=原始数组)\r\n 1, // 颜色模式 (0=彩色, 1=单色)\r\n ]\r\n },\r\n}\r\n\r\n/********************************************************************************\r\n * @brief: 为了方便使用,单独导出每个函数\r\n * @param: 无\r\n * @return: 函数引用\r\n ********************************************************************************/\r\nexport const generate = ImageToHexArray.generate.bind(ImageToHexArray)\r\nexport const imageDataToHexArray =\r\n ImageToHexArray.imageDataToHexArray.bind(ImageToHexArray)\r\nexport const colorImageSampling =\r\n ImageToHexArray.colorImageSampling.bind(ImageToHexArray)\r\nexport const ImageSamplingRow =\r\n ImageToHexArray.ImageSamplingRow.bind(ImageToHexArray)\r\nexport const ImageSamplingCol =\r\n ImageToHexArray.ImageSamplingCol.bind(ImageToHexArray)\r\nexport const ImageSamplingColRow =\r\n ImageToHexArray.ImageSamplingColRow.bind(ImageToHexArray)\r\nexport const ImageSamplingRowCol =\r\n ImageToHexArray.ImageSamplingRowCol.bind(ImageToHexArray)\r\nexport const base64ToImageData =\r\n ImageToHexArray.base64ToImageData.bind(ImageToHexArray)\r\nexport const resizeImageWithKonva =\r\n ImageToHexArray.resizeImageWithKonva.bind(ImageToHexArray)\r\nexport const resizeImageWithCanvas =\r\n ImageToHexArray.resizeImageWithCanvas.bind(ImageToHexArray)\r\nexport const arrayToHex = ImageToHexArray.arrayToHex.bind(ImageToHexArray)\r\nexport const hex2hex = ImageToHexArray.hex2hex.bind(ImageToHexArray)\r\nexport const generatePreview =\r\n ImageToHexArray.generatePreview.bind(ImageToHexArray)\r\nexport const createImageData =\r\n ImageToHexArray.createImageData.bind(ImageToHexArray)\r\nexport const formatHexOutput =\r\n ImageToHexArray.formatHexOutput.bind(ImageToHexArray)\r\nexport const calculateOutputSize =\r\n ImageToHexArray.calculateOutputSize.bind(ImageToHexArray)\r\nexport const getSamplingModeDescription =\r\n ImageToHexArray.getSamplingModeDescription.bind(ImageToHexArray)\r\nexport const getDefaultConfig =\r\n ImageToHexArray.getDefaultConfig.bind(ImageToHexArray)\r\n\r\n// 默认导出主对象\r\nexport default ImageToHexArray\r\n"],"mappings":"6iBAAA,IAAAA,GAAA,GAAAC,EAAAD,GAAA,gBAAAE,EAAA,qBAAAC,GAAA,wBAAAC,GAAA,qBAAAC,GAAA,wBAAAC,GAAA,oBAAAC,EAAA,eAAAC,GAAA,kBAAAC,EAAA,sBAAAC,GAAA,gBAAAC,EAAA,eAAAC,EAAA,wBAAAC,GAAA,uBAAAC,GAAA,qBAAAC,EAAA,oBAAAC,GAAA,UAAAC,GAAA,uBAAAC,EAAA,mBAAAC,GAAA,kBAAAC,GAAA,UAAAC,GAAA,gBAAAC,EAAA,oBAAAC,GAAA,aAAAC,GAAA,oBAAAC,GAAA,qBAAAC,GAAA,qBAAAC,EAAA,wBAAAC,EAAA,+BAAAC,GAAA,YAAAC,GAAA,eAAAC,EAAA,aAAAC,GAAA,aAAAC,EAAA,aAAAC,GAAA,wBAAAC,GAAA,SAAAC,GAAA,iBAAAC,EAAA,kBAAAC,EAAA,QAAAC,GAAA,kBAAAC,EAAA,gBAAAC,EAAA,eAAAC,EAAA,qBAAAC,EAAA,sBAAAC,GAAA,0BAAAC,GAAA,yBAAAC,GAAA,aAAAC,GAAA,oBAAAC,EAAA,kBAAAC,EAAA,SAAAC,KAAA,eAAAC,EAAAnD,ICWO,IAAMoD,EAAa,CAExB,CACE,IAAK,EACL,KAAM,IACN,IAAK,IACL,IAAK,KACL,KAAM,EACN,MAAO,EACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,EACL,KAAM,IACN,IAAK,IACL,IAAK,KACL,KAAM,EACN,MAAO,EACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,EACL,KAAM,IACN,IAAK,IACL,IAAK,KACL,KAAM,EACN,MAAO,EACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,EACL,KAAM,IACN,IAAK,IACL,IAAK,KACL,KAAM,EACN,MAAO,EACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,EACL,KAAM,IACN,IAAK,IACL,IAAK,KACL,KAAM,EACN,MAAO,EACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,IACL,IAAK,KACL,KAAM,EACN,MAAO,EACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,GAAG,CACf,EAGA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,KACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,KAAK,CACtB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CACrB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAK,CACtB,EACA,CACE,IAAK,GACL,KAAM,IACN,IAAK,KACL,IAAK,KACL,KAAM,EACN,MAAO,GACP,QAAS,CAAC,IAAK,IAAI,CAC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","names":["index_exports","__export","Endianness","ImageSamplingCol","ImageSamplingColRow","ImageSamplingRow","ImageSamplingRowCol","ImageToHexArray","arrayToHex","asciiArrToNum","base64ToImageData","bits16ToNum","bytesToNum","calculateOutputSize","colorImageSampling","compressJsonGzip","createImageData","debug","decompressJsonGzip","disableAllLogs","enableAllLogs","error","errorResult","formatHexOutput","generate","generatePreview","getDefaultConfig","getHIDCodeMapStr","getHIDCodeMapStrNum","getSamplingModeDescription","hex2hex","hidKeyCode","hslToHsv","hslToRgb","hsvToHsl","imageDataToHexArray","info","isImageValid","isShowPopover","log","numToAsciiArr","numToBits16","numToBytes","parseColorString","resetLoggerConfig","resizeImageWithCanvas","resizeImageWithKonva","rgbToHsl","setLoggerConfig","successResult","warn","__toCommonJS","hidKeyCode","getHIDCodeMapStr","map","curKey","alias","getHIDCodeMapStrNum","pre","cur","import_fflate","compressJsonGzip","data","jsonStr","uint8Array","compressedArray","decompressJsonGzip","file","arrayBuffer","decompressedArray","isShowPopover","popId","box","isImageValid","src","resolve","img","successResult","data","message","code","errorResult","Endianness","numToBytes","number","byteCount","endian","unsignedNum","byteArray","i","shift","bytesToNum","bytes","result","numToBits16","uint16","bits16ToNum","numToAsciiArr","n","c","asciiArrToNum","ascii","clamp","value","min","max","parseColorString","str","toRgbComponent","valueStr","isPercent","toAlphaComponent","toPercentComponent","rgbRegex","rgbMatch","rStr","gStr","bStr","rgbaRegex","rgbaMatch","aStr","hsvRegex","hsvMatch","hStr","sStr","vStr","hslRegex","hslMatch","lStr","hslaRegex","hslaMatch","hslToRgb","hsl","h","s","l","r","g","b","hue2rgb","p","q","t","rgbToHsl","rgb","delta","hsvToHsl","hsv","sHsv","v","hslToHsv","sHsl","clampedV","isBrowser","isDevelopmentEnv","DEFAULT_LOGGER_CONFIG","loggerConfig","isLogEnabled","type","log","args","info","warn","error","debug","setLoggerConfig","config","resetLoggerConfig","enableAllLogs","disableAllLogs","import_konva","ImageToHexArray","picData","thresholdData","config","picImageData","bufferData","error","imageData","threshold","pixels","height","width","pixelsLen","unpackedBuffer","i","pixelVal","samplingMode","samplingFunction","buffer","j","r","g","b","r5","g6","b5","color","bytesPerRow","x","page","bitOffset","pageShift","bytePos","bytesPerCol","y","base64Data","resolve","reject","img","canvas","ctx","image","colorMode","Konva","tempStage","tempLayer","imageNode","dataURL","data","gray","base64","array","hex","bytes","c","preview","hexArray","format","lineBreak","outputText","byteCount","kb","mode","generate","imageDataToHexArray","colorImageSampling","ImageSamplingRow","ImageSamplingCol","ImageSamplingColRow","ImageSamplingRowCol","base64ToImageData","resizeImageWithKonva","resizeImageWithCanvas","arrayToHex","hex2hex","generatePreview","createImageData","formatHexOutput","calculateOutputSize","getSamplingModeDescription","getDefaultConfig"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
var p=[{key:0,word:"a",dec:"4",hex:"04",kind:1,value:4,aliases:["A"]},{key:2,word:"b",dec:"5",hex:"05",kind:1,value:5,aliases:["B"]},{key:4,word:"c",dec:"6",hex:"06",kind:1,value:6,aliases:["C"]},{key:6,word:"d",dec:"7",hex:"07",kind:1,value:7,aliases:["D"]},{key:8,word:"e",dec:"8",hex:"08",kind:1,value:8,aliases:["E"]},{key:10,word:"f",dec:"9",hex:"09",kind:1,value:9,aliases:["F"]},{key:12,word:"g",dec:"10",hex:"0A",kind:1,value:10,aliases:["G"]},{key:14,word:"h",dec:"11",hex:"0B",kind:1,value:11,aliases:["H"]},{key:16,word:"i",dec:"12",hex:"0C",kind:1,value:12,aliases:["I"]},{key:18,word:"j",dec:"13",hex:"0D",kind:1,value:13,aliases:["J"]},{key:20,word:"k",dec:"14",hex:"0E",kind:1,value:14,aliases:["K"]},{key:22,word:"l",dec:"15",hex:"0F",kind:1,value:15,aliases:["L"]},{key:24,word:"m",dec:"16",hex:"10",kind:1,value:16,aliases:["M"]},{key:26,word:"n",dec:"17",hex:"11",kind:1,value:17,aliases:["N"]},{key:28,word:"o",dec:"18",hex:"12",kind:1,value:18,aliases:["O"]},{key:30,word:"p",dec:"19",hex:"13",kind:1,value:19,aliases:["P"]},{key:32,word:"q",dec:"20",hex:"14",kind:1,value:20,aliases:["Q"]},{key:34,word:"r",dec:"21",hex:"15",kind:1,value:21,aliases:["R"]},{key:36,word:"s",dec:"22",hex:"16",kind:1,value:22,aliases:["S"]},{key:38,word:"t",dec:"23",hex:"17",kind:1,value:23,aliases:["T"]},{key:40,word:"u",dec:"24",hex:"18",kind:1,value:24,aliases:["U"]},{key:42,word:"v",dec:"25",hex:"19",kind:1,value:25,aliases:["V"]},{key:44,word:"w",dec:"26",hex:"1A",kind:1,value:26,aliases:["W"]},{key:46,word:"x",dec:"27",hex:"1B",kind:1,value:27,aliases:["X"]},{key:48,word:"y",dec:"28",hex:"1C",kind:1,value:28,aliases:["Y"]},{key:50,word:"z",dec:"29",hex:"1D",kind:1,value:29,aliases:["Z"]},{key:52,word:"1",dec:"30",hex:"1E",kind:1,value:30,aliases:["!","1!"]},{key:54,word:"2",dec:"31",hex:"1F",kind:1,value:31,aliases:["@","2@"]},{key:56,word:"3",dec:"32",hex:"20",kind:1,value:32,aliases:["#","3#"]},{key:58,word:"4",dec:"33",hex:"21",kind:1,value:33,aliases:["$","4$"]},{key:60,word:"5",dec:"34",hex:"22",kind:1,value:34,aliases:["%","5%"]},{key:62,word:"6",dec:"35",hex:"23",kind:1,value:35,aliases:["^","6^"]},{key:64,word:"7",dec:"36",hex:"24",kind:1,value:36,aliases:["&","7&"]},{key:66,word:"8",dec:"37",hex:"25",kind:1,value:37,aliases:["*","8*"]},{key:68,word:"9",dec:"38",hex:"26",kind:1,value:38,aliases:["(","9("]},{key:70,word:"0",dec:"39",hex:"27",kind:1,value:39,aliases:[")","0)"]},{key:77,word:"-",dec:"45",hex:"2D",kind:1,value:45,aliases:["_","-_"]},{key:79,word:"=",dec:"46",hex:"2E",kind:1,value:46,aliases:["+","=+"]},{key:81,word:"[",dec:"47",hex:"2F",kind:1,value:47,aliases:["{","[{"]},{key:83,word:"]",dec:"48",hex:"30",kind:1,value:48,aliases:["}","}]"]},{key:85,word:"\\",dec:"49",hex:"31",kind:1,value:49,aliases:["|","\\|"]},{key:87,word:"`",dec:"50",hex:"32",kind:1,value:50,aliases:["~","`~"]},{key:89,word:";",dec:"51",hex:"33",kind:1,value:51,aliases:[":",";:"]},{key:91,word:"'",dec:"52",hex:"34",kind:1,value:52,aliases:['"',`'"`]},{key:95,word:",",dec:"54",hex:"36",kind:1,value:54,aliases:["<",",<"]},{key:97,word:".",dec:"55",hex:"37",kind:1,value:55,aliases:[">",".>"]},{key:99,word:"/",dec:"56",hex:"38",kind:1,value:56,aliases:["?","/?"]},{key:72,word:"Enter",dec:"40",hex:"28",kind:1,value:40},{key:73,word:"Escape",dec:"41",hex:"29",kind:1,value:41},{key:74,word:"Backspace",dec:"42",hex:"2A",kind:1,value:42},{key:75,word:"Tab",dec:"43",hex:"2B",kind:1,value:43},{key:76,word:" ",dec:"44",hex:"2C",kind:1,value:44},{key:101,word:"CapsLock",dec:"57",hex:"39",kind:1,value:57},{key:102,word:"F1",dec:"58",hex:"3A",kind:1,value:58},{key:103,word:"F2",dec:"59",hex:"3B",kind:1,value:59},{key:104,word:"F3",dec:"60",hex:"3C",kind:1,value:60},{key:105,word:"F4",dec:"61",hex:"3D",kind:1,value:61},{key:106,word:"F5",dec:"62",hex:"3E",kind:1,value:62},{key:107,word:"F6",dec:"63",hex:"3F",kind:1,value:63},{key:108,word:"F7",dec:"64",hex:"40",kind:1,value:64},{key:109,word:"F8",dec:"65",hex:"41",kind:1,value:65},{key:110,word:"F9",dec:"66",hex:"42",kind:1,value:66},{key:111,word:"F10",dec:"67",hex:"43",kind:1,value:67},{key:112,word:"F11",dec:"68",hex:"44",kind:1,value:68},{key:113,word:"F12",dec:"69",hex:"45",kind:1,value:69},{key:114,word:"PrintScreen",dec:"70",hex:"46",kind:1,value:70},{key:115,word:"ScrollLock",dec:"71",hex:"47",kind:1,value:71},{key:116,word:"Pause",dec:"72",hex:"48",kind:1,value:72},{key:117,word:"Insert",dec:"73",hex:"49",kind:1,value:73},{key:118,word:"Home",dec:"74",hex:"4A",kind:1,value:74},{key:119,word:"PageUp",dec:"75",hex:"4B",kind:1,value:75},{key:120,word:"DeleteForward",dec:"76",hex:"4C",kind:1,value:76},{key:121,word:"End",dec:"77",hex:"4D",kind:1,value:77},{key:122,word:"PageDown",dec:"78",hex:"4E",kind:1,value:78},{key:123,word:"ArrowRight",dec:"79",hex:"4F",kind:1,value:79},{key:124,word:"ArrowLeft",dec:"80",hex:"50",kind:1,value:80},{key:125,word:"ArrowDown",dec:"81",hex:"51",kind:1,value:81},{key:126,word:"ArrowUp",dec:"82",hex:"52",kind:1,value:82},{key:127,word:"NumLock",dec:"83",hex:"53",kind:1,value:83},{key:128,word:"Clear",dec:"83",hex:"53",kind:1,value:83},{key:160,word:"F13",dec:"104",hex:"68",kind:0,value:104},{key:161,word:"F14",dec:"105",hex:"69",kind:0,value:105},{key:162,word:"F15",dec:"106",hex:"6A",kind:0,value:106},{key:163,word:"F16",dec:"107",hex:"6B",kind:0,value:107},{key:164,word:"LeftControl",dec:"224",hex:"E0",kind:0,value:224},{key:165,word:"LeftShift",dec:"225",hex:"E1",kind:0,value:225},{key:166,word:"LeftAlt",dec:"226",hex:"E2",kind:0,value:226},{key:167,word:"LeftGUI",dec:"227",hex:"E3",kind:0,value:227},{key:168,word:"RightControl",dec:"228",hex:"E4",kind:0,value:228},{key:169,word:"RightShift",dec:"229",hex:"E5",kind:0,value:229},{key:170,word:"RightAlt",dec:"230",hex:"E6",kind:0,value:230},{key:171,word:"RightGUI",dec:"231",hex:"E7",kind:0,value:231}],S=()=>p.reduce((r,e)=>(r.set(e.word,e),e.aliases&&e.aliases.length>0&&e.aliases.forEach(n=>{r.set(n,e)}),r),new Map),M=()=>p.reduce((r,e)=>r.set(e.value,e),new Map);import{gzipSync as g,gunzipSync as b}from"fflate";var F=r=>{let e=JSON.stringify(r),n=new TextEncoder().encode(e),d=new Uint8Array(g(n));return new Blob([d],{type:"application/gzip"})},A=async r=>{let e=await r.arrayBuffer(),n=b(new Uint8Array(e)),d=new TextDecoder().decode(n);return JSON.parse(d)};function L(r){let e=document.getElementById(r);return e&&window.getComputedStyle(e).display!=="none"&&e.getAttribute("aria-hidden")!=="true"}function B(r){return new Promise(e=>{let n=new Image;n.src=typeof r=="string"?r:URL.createObjectURL(r),n.onload=()=>e(!0),n.onerror=()=>e(!1)})}function R(r=null,e="",n=0){return{success:!0,code:n,message:e,data:r}}function I(r,e=-1,n=null){return{success:!1,code:e,message:r,data:n}}var w={LITTLE:"little",BIG:"big"},G=(r,e,n=w.BIG)=>{if(!Number.isInteger(e)||e<=0)throw new Error("Byte count must be a positive integer.");let d=r>>>0,a=new Array(e);for(let s=0;s<e;s++){let o=n===w.LITTLE?s*8:(e-1-s)*8;a[s]=d>>o&255}return a},D=(r,e=w.BIG)=>{let n=0;if(e===w.LITTLE)for(let d=0;d<r.length;d++)n|=(r[d]&255)<<d*8;else for(let d=0;d<r.length;d++)n|=(r[d]&255)<<(r.length-1-d)*8;return n},N=(r,e=w.BIG)=>{let n=r&65535;return e===w.LITTLE?[n&255,n>>8&255]:[n>>8&255,n&255]},U=(r,e=w.BIG)=>{if(r.length!==2)throw new Error("Input array must have exactly 2 elements");return e===w.LITTLE?r[1]<<8|r[0]:r[0]<<8|r[1]},$=r=>Math.abs(r).toString().split("").map(e=>e.charCodeAt(0)),z=r=>Number(String.fromCharCode(...r));var i=(r,e,n)=>Math.min(Math.max(r,e),n);function V(r){let e=t=>{let u=t.endsWith("%"),c=parseFloat(t.replace("%",""));return u?Math.round(i(c/100,0,1)*255):i(Math.round(c),0,255)},n=t=>{let u=t.endsWith("%"),c=parseFloat(t.replace("%",""));return i(u?c/100:c,0,1)},d=t=>{if(!t.endsWith("%"))return 0;let u=parseFloat(t.replace("%",""));return i(u/100,0,1)},a=/^rgb\(\s*(\d+(\.\d+)?%?)\s*,\s*(\d+(\.\d+)?%?)\s*,\s*(\d+(\.\d+)?%?)\s*\)$/i,s=r.match(a);if(s){let[,t,,u,,c]=s;return{type:"rgb",r:e(t),g:e(u),b:e(c)}}let o=/^rgba\(\s*(\d+(\.\d+)?%?)\s*,\s*(\d+(\.\d+)?%?)\s*,\s*(\d+(\.\d+)?%?)\s*,\s*(\d+(\.\d+)?%?)\s*\)$/i,h=r.match(o);if(h){let[,t,,u,,c,,m]=h;return{type:"rgba",r:e(t),g:e(u),b:e(c),a:n(m)}}let x=/^hsv\(\s*(\d+(\.\d+)?)\s*,\s*(\d+(\.\d+)?%)\s*,\s*(\d+(\.\d+)?%)\s*\)$/i,l=r.match(x);if(l){let[,t,,u,,c]=l;return{type:"hsv",h:i(parseFloat(t),0,360),s:d(u),v:d(c)}}let y=/^hsl\(\s*(\d+(\.\d+)?)\s*,\s*(\d+(\.\d+)?%)\s*,\s*(\d+(\.\d+)?%)\s*\)$/i,v=r.match(y);if(v){let[,t,,u,,c]=v;return{type:"hsl",h:i(parseFloat(t),0,360),s:d(u),l:d(c)}}let k=/^hsla\(\s*(\d+(\.\d+)?)\s*,\s*(\d+(\.\d+)?%)\s*,\s*(\d+(\.\d+)?%)\s*,\s*(\d+(\.\d+)?%?)\s*\)$/i,f=r.match(k);if(f){let[,t,,u,,c,,m]=f;return{type:"hsla",h:i(parseFloat(t),0,360),s:d(u),l:d(c),a:n(m)}}return null}function j(r){let e=i(r.h,0,360)/360,n=i(r.s,0,1),d=i(r.l,0,1),a=0,s=0,o=0;if(n===0)a=s=o=d;else{let h=(y,v,k)=>(k<0&&(k+=1),k>1&&(k-=1),k<.16666666666666666?y+(v-y)*6*k:k<.5?v:k<.6666666666666666?y+(v-y)*(.6666666666666666-k)*6:y),x=d<.5?d*(1+n):d+n-d*n,l=2*d-x;a=h(l,x,e+1/3),s=h(l,x,e),o=h(l,x,e-1/3)}return{type:"rgb",r:Math.round(a*255),g:Math.round(s*255),b:Math.round(o*255)}}function O(r){let e=i(r.r,0,255)/255,n=i(r.g,0,255)/255,d=i(r.b,0,255)/255,a=Math.max(e,n,d),s=Math.min(e,n,d),o=a-s,h=(a+s)/2,x=0;o!==0&&(x=o/(1-Math.abs(2*h-1)));let l=0;if(o!==0){switch(a){case e:l=(n-d)/o%6;break;case n:l=(d-e)/o+2;break;case d:l=(e-n)/o+4;break}l=Math.round(l*60),l<0&&(l+=360)}return{type:"hsl",h:i(l,0,360),s:i(x,0,1),l:i(h,0,1)}}function W(r){let{h:e,s:n,v:d}=r,a;n===0?a=d:a=(2-n)*d/2,a=Math.max(0,Math.min(1,a));let s;return a===0||a===1?s=0:(s=n*d/(1-Math.abs(2*a-1)),s=Math.max(0,Math.min(1,s))),{type:"hsl",h:Math.max(0,Math.min(360,e)),s,l:a}}function _(r){let{h:e,s:n,l:d}=r,a=d+n*Math.min(d,1-d),s=Math.max(0,Math.min(1,a)),o;return s===0?o=0:(o=2*(1-d/s),o=Math.max(0,Math.min(1,o))),{type:"hsv",h:Math.max(0,Math.min(360,e)),s:o,v:s}}export{w as Endianness,z as asciiArrToNum,U as bits16ToNum,D as bytesToNum,F as compressJsonGzip,A as decompressJsonGzip,I as errorResult,S as getHIDCodeMapStr,M as getHIDCodeMapStrNum,p as hidKeyCode,_ as hslToHsv,j as hslToRgb,W as hsvToHsl,B as isImageValid,L as isShowPopover,$ as numToAsciiArr,N as numToBits16,G as numToBytes,V as parseColorString,O as rgbToHsl,R as successResult};
|
|
1
|
+
var I=[{key:0,word:"a",dec:"4",hex:"04",kind:1,value:4,aliases:["A"]},{key:2,word:"b",dec:"5",hex:"05",kind:1,value:5,aliases:["B"]},{key:4,word:"c",dec:"6",hex:"06",kind:1,value:6,aliases:["C"]},{key:6,word:"d",dec:"7",hex:"07",kind:1,value:7,aliases:["D"]},{key:8,word:"e",dec:"8",hex:"08",kind:1,value:8,aliases:["E"]},{key:10,word:"f",dec:"9",hex:"09",kind:1,value:9,aliases:["F"]},{key:12,word:"g",dec:"10",hex:"0A",kind:1,value:10,aliases:["G"]},{key:14,word:"h",dec:"11",hex:"0B",kind:1,value:11,aliases:["H"]},{key:16,word:"i",dec:"12",hex:"0C",kind:1,value:12,aliases:["I"]},{key:18,word:"j",dec:"13",hex:"0D",kind:1,value:13,aliases:["J"]},{key:20,word:"k",dec:"14",hex:"0E",kind:1,value:14,aliases:["K"]},{key:22,word:"l",dec:"15",hex:"0F",kind:1,value:15,aliases:["L"]},{key:24,word:"m",dec:"16",hex:"10",kind:1,value:16,aliases:["M"]},{key:26,word:"n",dec:"17",hex:"11",kind:1,value:17,aliases:["N"]},{key:28,word:"o",dec:"18",hex:"12",kind:1,value:18,aliases:["O"]},{key:30,word:"p",dec:"19",hex:"13",kind:1,value:19,aliases:["P"]},{key:32,word:"q",dec:"20",hex:"14",kind:1,value:20,aliases:["Q"]},{key:34,word:"r",dec:"21",hex:"15",kind:1,value:21,aliases:["R"]},{key:36,word:"s",dec:"22",hex:"16",kind:1,value:22,aliases:["S"]},{key:38,word:"t",dec:"23",hex:"17",kind:1,value:23,aliases:["T"]},{key:40,word:"u",dec:"24",hex:"18",kind:1,value:24,aliases:["U"]},{key:42,word:"v",dec:"25",hex:"19",kind:1,value:25,aliases:["V"]},{key:44,word:"w",dec:"26",hex:"1A",kind:1,value:26,aliases:["W"]},{key:46,word:"x",dec:"27",hex:"1B",kind:1,value:27,aliases:["X"]},{key:48,word:"y",dec:"28",hex:"1C",kind:1,value:28,aliases:["Y"]},{key:50,word:"z",dec:"29",hex:"1D",kind:1,value:29,aliases:["Z"]},{key:52,word:"1",dec:"30",hex:"1E",kind:1,value:30,aliases:["!","1!"]},{key:54,word:"2",dec:"31",hex:"1F",kind:1,value:31,aliases:["@","2@"]},{key:56,word:"3",dec:"32",hex:"20",kind:1,value:32,aliases:["#","3#"]},{key:58,word:"4",dec:"33",hex:"21",kind:1,value:33,aliases:["$","4$"]},{key:60,word:"5",dec:"34",hex:"22",kind:1,value:34,aliases:["%","5%"]},{key:62,word:"6",dec:"35",hex:"23",kind:1,value:35,aliases:["^","6^"]},{key:64,word:"7",dec:"36",hex:"24",kind:1,value:36,aliases:["&","7&"]},{key:66,word:"8",dec:"37",hex:"25",kind:1,value:37,aliases:["*","8*"]},{key:68,word:"9",dec:"38",hex:"26",kind:1,value:38,aliases:["(","9("]},{key:70,word:"0",dec:"39",hex:"27",kind:1,value:39,aliases:[")","0)"]},{key:77,word:"-",dec:"45",hex:"2D",kind:1,value:45,aliases:["_","-_"]},{key:79,word:"=",dec:"46",hex:"2E",kind:1,value:46,aliases:["+","=+"]},{key:81,word:"[",dec:"47",hex:"2F",kind:1,value:47,aliases:["{","[{"]},{key:83,word:"]",dec:"48",hex:"30",kind:1,value:48,aliases:["}","}]"]},{key:85,word:"\\",dec:"49",hex:"31",kind:1,value:49,aliases:["|","\\|"]},{key:87,word:"`",dec:"50",hex:"32",kind:1,value:50,aliases:["~","`~"]},{key:89,word:";",dec:"51",hex:"33",kind:1,value:51,aliases:[":",";:"]},{key:91,word:"'",dec:"52",hex:"34",kind:1,value:52,aliases:['"',`'"`]},{key:95,word:",",dec:"54",hex:"36",kind:1,value:54,aliases:["<",",<"]},{key:97,word:".",dec:"55",hex:"37",kind:1,value:55,aliases:[">",".>"]},{key:99,word:"/",dec:"56",hex:"38",kind:1,value:56,aliases:["?","/?"]},{key:72,word:"Enter",dec:"40",hex:"28",kind:1,value:40},{key:73,word:"Escape",dec:"41",hex:"29",kind:1,value:41},{key:74,word:"Backspace",dec:"42",hex:"2A",kind:1,value:42},{key:75,word:"Tab",dec:"43",hex:"2B",kind:1,value:43},{key:76,word:" ",dec:"44",hex:"2C",kind:1,value:44},{key:101,word:"CapsLock",dec:"57",hex:"39",kind:1,value:57},{key:102,word:"F1",dec:"58",hex:"3A",kind:1,value:58},{key:103,word:"F2",dec:"59",hex:"3B",kind:1,value:59},{key:104,word:"F3",dec:"60",hex:"3C",kind:1,value:60},{key:105,word:"F4",dec:"61",hex:"3D",kind:1,value:61},{key:106,word:"F5",dec:"62",hex:"3E",kind:1,value:62},{key:107,word:"F6",dec:"63",hex:"3F",kind:1,value:63},{key:108,word:"F7",dec:"64",hex:"40",kind:1,value:64},{key:109,word:"F8",dec:"65",hex:"41",kind:1,value:65},{key:110,word:"F9",dec:"66",hex:"42",kind:1,value:66},{key:111,word:"F10",dec:"67",hex:"43",kind:1,value:67},{key:112,word:"F11",dec:"68",hex:"44",kind:1,value:68},{key:113,word:"F12",dec:"69",hex:"45",kind:1,value:69},{key:114,word:"PrintScreen",dec:"70",hex:"46",kind:1,value:70},{key:115,word:"ScrollLock",dec:"71",hex:"47",kind:1,value:71},{key:116,word:"Pause",dec:"72",hex:"48",kind:1,value:72},{key:117,word:"Insert",dec:"73",hex:"49",kind:1,value:73},{key:118,word:"Home",dec:"74",hex:"4A",kind:1,value:74},{key:119,word:"PageUp",dec:"75",hex:"4B",kind:1,value:75},{key:120,word:"DeleteForward",dec:"76",hex:"4C",kind:1,value:76},{key:121,word:"End",dec:"77",hex:"4D",kind:1,value:77},{key:122,word:"PageDown",dec:"78",hex:"4E",kind:1,value:78},{key:123,word:"ArrowRight",dec:"79",hex:"4F",kind:1,value:79},{key:124,word:"ArrowLeft",dec:"80",hex:"50",kind:1,value:80},{key:125,word:"ArrowDown",dec:"81",hex:"51",kind:1,value:81},{key:126,word:"ArrowUp",dec:"82",hex:"52",kind:1,value:82},{key:127,word:"NumLock",dec:"83",hex:"53",kind:1,value:83},{key:128,word:"Clear",dec:"83",hex:"53",kind:1,value:83},{key:160,word:"F13",dec:"104",hex:"68",kind:0,value:104},{key:161,word:"F14",dec:"105",hex:"69",kind:0,value:105},{key:162,word:"F15",dec:"106",hex:"6A",kind:0,value:106},{key:163,word:"F16",dec:"107",hex:"6B",kind:0,value:107},{key:164,word:"LeftControl",dec:"224",hex:"E0",kind:0,value:224},{key:165,word:"LeftShift",dec:"225",hex:"E1",kind:0,value:225},{key:166,word:"LeftAlt",dec:"226",hex:"E2",kind:0,value:226},{key:167,word:"LeftGUI",dec:"227",hex:"E3",kind:0,value:227},{key:168,word:"RightControl",dec:"228",hex:"E4",kind:0,value:228},{key:169,word:"RightShift",dec:"229",hex:"E5",kind:0,value:229},{key:170,word:"RightAlt",dec:"230",hex:"E6",kind:0,value:230},{key:171,word:"RightGUI",dec:"231",hex:"E7",kind:0,value:231}],R=()=>I.reduce((e,n)=>(e.set(n.word,n),n.aliases&&n.aliases.length>0&&n.aliases.forEach(r=>{e.set(r,n)}),e),new Map),L=()=>I.reduce((e,n)=>e.set(n.value,n),new Map);import{gzipSync as M,gunzipSync as A}from"fflate";var U=e=>{let n=JSON.stringify(e),r=new TextEncoder().encode(n),t=new Uint8Array(M(r));return new Blob([t],{type:"application/gzip"})},H=async e=>{let n=await e.arrayBuffer(),r=A(new Uint8Array(n)),t=new TextDecoder().decode(r);return JSON.parse(t)};function N(e){let n=document.getElementById(e);return n&&window.getComputedStyle(n).display!=="none"&&n.getAttribute("aria-hidden")!=="true"}function B(e){return new Promise(n=>{let r=new Image;r.src=typeof e=="string"?e:URL.createObjectURL(e),r.onload=()=>n(!0),r.onerror=()=>n(!1)})}function _(e=null,n="",r=0){return{success:!0,code:r,message:n,data:e}}function V(e,n=-1,r=null){return{success:!1,code:n,message:e,data:r}}var w={LITTLE:"little",BIG:"big"},$=(e,n,r=w.BIG)=>{if(!Number.isInteger(n)||n<=0)throw new Error("Byte count must be a positive integer.");let t=e>>>0,o=new Array(n);for(let a=0;a<n;a++){let s=r===w.LITTLE?a*8:(n-1-a)*8;o[a]=t>>s&255}return o},W=(e,n=w.BIG)=>{let r=0;if(n===w.LITTLE)for(let t=0;t<e.length;t++)r|=(e[t]&255)<<t*8;else for(let t=0;t<e.length;t++)r|=(e[t]&255)<<(e.length-1-t)*8;return r},j=(e,n=w.BIG)=>{let r=e&65535;return n===w.LITTLE?[r&255,r>>8&255]:[r>>8&255,r&255]},J=(e,n=w.BIG)=>{if(e.length!==2)throw new Error("Input array must have exactly 2 elements");return n===w.LITTLE?e[1]<<8|e[0]:e[0]<<8|e[1]},K=e=>Math.abs(e).toString().split("").map(n=>n.charCodeAt(0)),Q=e=>Number(String.fromCharCode(...e));var x=(e,n,r)=>Math.min(Math.max(e,n),r);function X(e){let n=f=>{let p=f.endsWith("%"),y=parseFloat(f.replace("%",""));return p?Math.round(x(y/100,0,1)*255):x(Math.round(y),0,255)},r=f=>{let p=f.endsWith("%"),y=parseFloat(f.replace("%",""));return x(p?y/100:y,0,1)},t=f=>{if(!f.endsWith("%"))return 0;let p=parseFloat(f.replace("%",""));return x(p/100,0,1)},o=/^rgb\(\s*(\d+(\.\d+)?%?)\s*,\s*(\d+(\.\d+)?%?)\s*,\s*(\d+(\.\d+)?%?)\s*\)$/i,a=e.match(o);if(a){let[,f,,p,,y]=a;return{type:"rgb",r:n(f),g:n(p),b:n(y)}}let s=/^rgba\(\s*(\d+(\.\d+)?%?)\s*,\s*(\d+(\.\d+)?%?)\s*,\s*(\d+(\.\d+)?%?)\s*,\s*(\d+(\.\d+)?%?)\s*\)$/i,u=e.match(s);if(u){let[,f,,p,,y,,S]=u;return{type:"rgba",r:n(f),g:n(p),b:n(y),a:r(S)}}let m=/^hsv\(\s*(\d+(\.\d+)?)\s*,\s*(\d+(\.\d+)?%)\s*,\s*(\d+(\.\d+)?%)\s*\)$/i,i=e.match(m);if(i){let[,f,,p,,y]=i;return{type:"hsv",h:x(parseFloat(f),0,360),s:t(p),v:t(y)}}let d=/^hsl\(\s*(\d+(\.\d+)?)\s*,\s*(\d+(\.\d+)?%)\s*,\s*(\d+(\.\d+)?%)\s*\)$/i,c=e.match(d);if(c){let[,f,,p,,y]=c;return{type:"hsl",h:x(parseFloat(f),0,360),s:t(p),l:t(y)}}let g=/^hsla\(\s*(\d+(\.\d+)?)\s*,\s*(\d+(\.\d+)?%)\s*,\s*(\d+(\.\d+)?%)\s*,\s*(\d+(\.\d+)?%?)\s*\)$/i,h=e.match(g);if(h){let[,f,,p,,y,,S]=h;return{type:"hsla",h:x(parseFloat(f),0,360),s:t(p),l:t(y),a:r(S)}}return null}function Y(e){let n=x(e.h,0,360)/360,r=x(e.s,0,1),t=x(e.l,0,1),o=0,a=0,s=0;if(r===0)o=a=s=t;else{let u=(d,c,g)=>(g<0&&(g+=1),g>1&&(g-=1),g<.16666666666666666?d+(c-d)*6*g:g<.5?c:g<.6666666666666666?d+(c-d)*(.6666666666666666-g)*6:d),m=t<.5?t*(1+r):t+r-t*r,i=2*t-m;o=u(i,m,n+1/3),a=u(i,m,n),s=u(i,m,n-1/3)}return{type:"rgb",r:Math.round(o*255),g:Math.round(a*255),b:Math.round(s*255)}}function Z(e){let n=x(e.r,0,255)/255,r=x(e.g,0,255)/255,t=x(e.b,0,255)/255,o=Math.max(n,r,t),a=Math.min(n,r,t),s=o-a,u=(o+a)/2,m=0;s!==0&&(m=s/(1-Math.abs(2*u-1)));let i=0;if(s!==0){switch(o){case n:i=(r-t)/s%6;break;case r:i=(t-n)/s+2;break;case t:i=(n-r)/s+4;break}i=Math.round(i*60),i<0&&(i+=360)}return{type:"hsl",h:x(i,0,360),s:x(m,0,1),l:x(u,0,1)}}function ee(e){let{h:n,s:r,v:t}=e,o;r===0?o=t:o=(2-r)*t/2,o=Math.max(0,Math.min(1,o));let a;return o===0||o===1?a=0:(a=r*t/(1-Math.abs(2*o-1)),a=Math.max(0,Math.min(1,a))),{type:"hsl",h:Math.max(0,Math.min(360,n)),s:a,l:o}}function ne(e){let{h:n,s:r,l:t}=e,o=t+r*Math.min(t,1-t),a=Math.max(0,Math.min(1,o)),s;return a===0?s=0:(s=2*(1-t/a),s=Math.max(0,Math.min(1,s))),{type:"hsv",h:Math.max(0,Math.min(360,n)),s,v:a}}var T=typeof window<"u",D=()=>typeof process<"u"&&process.env?.NODE_ENV?process.env.NODE_ENV==="development":T&&window.__ENV__?.MODE?window.__ENV__.MODE==="development":!0,C={enable:D(),reserveTypes:["error"],prefix:"[iLx1-tool]"},k={...C},b=e=>k.enable?!0:k.reserveTypes.includes(e),re=(...e)=>{b("log")&&console.log(`${k.prefix} [LOG]`,...e)},oe=(...e)=>{b("info")&&console.info(`${k.prefix} [INFO]`,...e)},ae=(...e)=>{b("warn")&&console.warn(`${k.prefix} [WARN]`,...e)},se=(...e)=>{b("error")&&console.error(`${k.prefix} [ERROR]`,...e)},ie=(...e)=>{b("debug")&&console.debug(`${k.prefix} [DEBUG]`,...e)},E=e=>{k={...k,...e}},de=()=>{k={...C}},le=()=>{E({enable:!0,reserveTypes:["log","info","warn","error","debug"]})},ce=()=>{E({enable:!1,reserveTypes:[]})};import v from"konva";var l={generate:async function(e,n,r){try{let t=await this.base64ToImageData(e),o=this.imageDataToHexArray(t,n,r);return r[3]===0?this.hex2hex(this.arrayToHex(o)):o}catch(t){throw console.error("\u751F\u6210\u5341\u516D\u8FDB\u5236\u6570\u7EC4\u65F6\u51FA\u9519:",t),t}},imageDataToHexArray:function(e,n,r){let t=e.data,o=e.height,a=e.width,s=t.length;if(r[4]==1){let u=[];for(let c=0;c<s;c+=4){let h=t[c]*.299+t[c+1]*.587+t[c+2]*.114>n?1:0;u[c/4]=h}let i=r[1],d;switch(i){case 0:d=this.ImageSamplingRow;break;case 1:d=this.ImageSamplingCol;break;case 2:d=this.ImageSamplingColRow;break;case 3:d=this.ImageSamplingRowCol;break;default:d=this.ImageSamplingRow}if(typeof d!="function")throw new Error(`\u53D6\u6A21\u51FD\u6570\u672A\u5B9A\u4E49\uFF0CsamplingMode: ${i}`);return d.call(this,u,a,o,r)}else return this.colorImageSampling(t,a,o,r)},colorImageSampling:function(e,n,r,t){let o=new Uint8Array(n*r*2),a=0,s=0;for(;a<o.length&&s<e.length;){let u=e[s],m=e[s+1],i=e[s+2],d=u>>3&31,c=m>>2&63,g=i>>3&31,h=d<<11|c<<5|g;o[a]=h>>8&255,o[a+1]=h&255,(t[0]==0||t[2]==1)&&(o[a]=~o[a]&255,o[a+1]=~o[a+1]&255),a+=2,s+=4}return o},ImageSamplingRow:function(e,n,r,t){let o=Math.ceil(n/8),a=new Uint8Array(o*r);for(let s=0;s<e.length;s++){let u=s%n,i=Math.floor(s/n),d=u%8,c=1<<d;t[2]!=0&&(c=1<<7-d);let g=i*o+Math.floor(u/8),h=e[s];t[0]!==0&&(h=h===0?1:0),h===0?a[g]|=c:a[g]&=~c}return a},ImageSamplingCol:function(e,n,r,t){let o=Math.ceil(r/8),a=new Uint8Array(o*n);for(let s=0;s<e.length;s++){let u=s%n,m=Math.floor(s/n),i=u,d=m%8,c=1<<d;t[2]!=0&&(c=1<<7-d);let g=i*o+Math.floor(m/8),h=e[s];t[0]!==0&&(h=h===0?1:0),h===0?a[g]|=c:a[g]&=~c}return a},ImageSamplingColRow:function(e,n,r,t){let o=Math.ceil(r/8),a=new Uint8Array(o*n);for(let s=0;s<e.length;s++){let u=s%n,m=Math.floor(s/n),i=Math.floor(m/8),d=m%8,c=1<<d;t[2]!=0&&(c=1<<7-d);let g=u+i*n,h=e[s];t[0]!==0&&(h=h===0?1:0),h===0?a[g]|=c:a[g]&=~c}return a},ImageSamplingRowCol:function(e,n,r,t){let o=Math.ceil(n/8),a=new Uint8Array(o*r);for(let s=0;s<e.length;s++){let u=s%n,m=Math.floor(s/n),i=Math.floor(u/8),d=u%8,c=1<<d;t[2]!=0&&(c=1<<7-d);let g=i*r+m,h=e[s];t[0]!==0&&(h=h===0?1:0),h===0?a[g]|=c:a[g]&=~c}return a},base64ToImageData:function(e){return new Promise((n,r)=>{let t=new Image;t.crossOrigin="anonymous",t.src=e,t.onload=()=>{try{let o=document.createElement("canvas");o.width=t.width,o.height=t.height;let a=o.getContext("2d");a.drawImage(t,0,0);let s=a.getImageData(0,0,o.width,o.height);n(s)}catch(o){r(new Error(`\u8F6C\u6362\u56FE\u50CF\u6570\u636E\u5931\u8D25: ${o.message}`))}},t.onerror=()=>{r(new Error("\u52A0\u8F7D\u56FE\u50CF\u5931\u8D25"))},t.src=e})},resizeImageWithKonva:async function(e,n,r,t){if(e===0||n===0)throw new Error("\u5BBD\u5EA6\u548C\u9AD8\u5EA6\u4E0D\u80FD\u4E3A0");if(!r)throw new Error("\u56FE\u50CF\u5BF9\u8C61\u4E0D\u80FD\u4E3A\u7A7A");return new Promise(o=>{if(typeof v>"u"){this.resizeImageWithCanvas(e,n,r,t).then(o).catch(()=>{let i=document.createElement("canvas");i.width=r.width,i.height=r.height,i.getContext("2d").drawImage(r,0,0),o(i.toDataURL("image/png"))});return}let a=new v.Stage({container:document.createElement("div"),width:e,height:n}),s=new v.Layer;a.add(s);let u=new v.Image({image:r,width:e,height:n});t&&u.filters([v.Filters.Grayscale]),s.add(u),s.batchDraw();let m=a.toDataURL({mimeType:"image/png",quality:1,pixelRatio:1});a.destroy(),o(m)})},resizeImageWithCanvas:async function(e,n,r,t){return new Promise(o=>{let a=document.createElement("canvas");a.width=e,a.height=n;let s=a.getContext("2d");if(s.imageSmoothingEnabled=!0,s.imageSmoothingQuality="high",s.drawImage(r,0,0,e,n),t){let m=s.getImageData(0,0,e,n),i=m.data;for(let d=0;d<i.length;d+=4){let c=i[d]*.299+i[d+1]*.587+i[d+2]*.114;i[d]=i[d+1]=i[d+2]=c}s.putImageData(m,0,0)}let u=a.toDataURL("image/png");o(u)})},arrayToHex:function(e){return!e||e.length===0?"":Array.from(e).map(n=>Number(n).toString(16).padStart(2,"0")).join("")},hex2hex:function(e){if(!e||e.length===0)return[];let n=[];for(let r=0;r<e.length;r+=2)n.push("0x"+e.substring(r,r+2));return n},generatePreview:function(e,n){if(!e||e.length===0)return"";let r="";for(let t=0;t<e.length;t++)r+=e[t]===0?"0":"1",(t+1)%n===0&&(r+=`
|
|
2
|
+
`);return r},createImageData:function(e,n,r=null){let t=document.createElement("canvas");t.width=e,t.height=n;let o=t.getContext("2d");if(r){let a=o.createImageData(e,n);return a.data.set(r),a}else return o.createImageData(e,n)},formatHexOutput:function(e,n=0,r=16){if(!e||e.length===0)return"\u65E0\u6570\u636E";let t="";if(n===0&&Array.isArray(e))for(let o=0;o<e.length;o++)t+=e[o]+", ",(o+1)%r===0&&(t+=`
|
|
3
|
+
`);else if(e instanceof Uint8Array)for(let o=0;o<e.length;o++)t+=e[o].toString(16).padStart(2,"0")+" ",(o+1)%r===0&&(t+=`
|
|
4
|
+
`);else t=e.toString();return t},calculateOutputSize:function(e){let n=0;(Array.isArray(e)||e instanceof Uint8Array)&&(n=e.length);let r=n/1024;return{bytes:n,kilobytes:r,formatted:`${n} \u5B57\u8282 (${r.toFixed(2)} KB)`}},getSamplingModeDescription:function(e){return{0:"\u9010\u884C\u5F0F (\u4ECE\u5DE6\u5230\u53F3\uFF0C\u4ECE\u4E0A\u5230\u4E0B)",1:"\u9010\u5217\u5F0F (\u4ECE\u4E0A\u5230\u4E0B\uFF0C\u4ECE\u5DE6\u5230\u53F3)",2:"\u5217\u884C\u5F0F (\u5148\u5217\u540E\u884C)",3:"\u884C\u5217\u5F0F (\u5148\u884C\u540E\u5217)"}[e]||"\u672A\u77E5\u53D6\u6A21\u65B9\u5F0F"},getDefaultConfig:function(){return[0,0,0,0,1]}},ge=l.generate.bind(l),he=l.imageDataToHexArray.bind(l),fe=l.colorImageSampling.bind(l),xe=l.ImageSamplingRow.bind(l),pe=l.ImageSamplingCol.bind(l),ye=l.ImageSamplingColRow.bind(l),ke=l.ImageSamplingRowCol.bind(l),we=l.base64ToImageData.bind(l),be=l.resizeImageWithKonva.bind(l),ve=l.resizeImageWithCanvas.bind(l),Se=l.arrayToHex.bind(l),Ie=l.hex2hex.bind(l),Ce=l.generatePreview.bind(l),Ee=l.createImageData.bind(l),Me=l.formatHexOutput.bind(l),Ae=l.calculateOutputSize.bind(l),Te=l.getSamplingModeDescription.bind(l),De=l.getDefaultConfig.bind(l);export{w as Endianness,pe as ImageSamplingCol,ye as ImageSamplingColRow,xe as ImageSamplingRow,ke as ImageSamplingRowCol,l as ImageToHexArray,Se as arrayToHex,Q as asciiArrToNum,we as base64ToImageData,J as bits16ToNum,W as bytesToNum,Ae as calculateOutputSize,fe as colorImageSampling,U as compressJsonGzip,Ee as createImageData,ie as debug,H as decompressJsonGzip,ce as disableAllLogs,le as enableAllLogs,se as error,V as errorResult,Me as formatHexOutput,ge as generate,Ce as generatePreview,De as getDefaultConfig,R as getHIDCodeMapStr,L as getHIDCodeMapStrNum,Te as getSamplingModeDescription,Ie as hex2hex,I as hidKeyCode,ne as hslToHsv,Y as hslToRgb,ee as hsvToHsl,he as imageDataToHexArray,oe as info,B as isImageValid,N as isShowPopover,re as log,K as numToAsciiArr,j as numToBits16,$ as numToBytes,X as parseColorString,de as resetLoggerConfig,ve as resizeImageWithCanvas,be as resizeImageWithKonva,Z as rgbToHsl,E as setLoggerConfig,_ as successResult,ae as warn};
|
|
2
5
|
//# sourceMappingURL=index.mjs.map
|