`;
const hexInput = document.getElementById('hexInput');
const rgbInput = document.getElementById('rgbInput');
const preview = document.getElementById('colorPreview');
hexInput.addEventListener('input', () => {
const hex = hexInput.value;
const rgb = hexToRgb(hex);
if (rgb) {
rgbInput.value = `${rgb.r}, ${rgb.g}, ${rgb.b}`;
preview.style.backgroundColor = hex;
}
});
rgbInput.addEventListener('input', () => {
const rgbStr = rgbInput.value;
const parts = rgbStr.split(',').map(s => parseInt(s.trim()));
if (parts.length === 3 && parts.every(p => !isNaN(p) && p >= 0 && p <= 255)) {
const hex = rgbToHex(parts[0], parts[1], parts[2]);
hexInput.value = hex;
preview.style.backgroundColor = hex;
}
});
}
function loremIpsumGeneratorUI(parent) {
parent.innerHTML = `
`;
document.getElementById('generateLoremBtn').addEventListener('click', () => {
const count = parseInt(document.getElementById('loremCount').value);
const lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
let result = '';
for(let i=0; i < count; i++) {
result += `
${lorem}
`;
}
document.getElementById('loremResult').innerHTML = result;
});
}
function htmlMinifierUI(parent) {
parent.innerHTML = `
`;
document.getElementById('minifyBtn').addEventListener('click', () => {
let html = document.getElementById('htmlInput').value;
html = html.replace(//g, ''); // Remove comments
html = html.replace(/\s+/g, ' '); // Collapse whitespace
html = html.replace(/>\s+<'); // Remove space between tags
document.getElementById('htmlOutput').value = html.trim();
});
}
function textDifferenceCheckerUI(parent) {
// This uses a simple Longest Common Subsequence based diff algorithm
parent.innerHTML = `
`;
const textA = document.getElementById('textA');
const textB = document.getElementById('textB');
function diff() {
const a = textA.value.split(/\s+/);
const b = textB.value.split(/\s+/);
const diff = diff_main(a.join(' '), b.join(' '));
document.getElementById('diffResult').innerHTML = diff_prettyHtml(diff);
}
textA.addEventListener('input', diff);
textB.addEventListener('input', diff);
}
// --- Helper Functions ---
function hexToRgb(hex) {
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
return result ? {
r: parseInt(result[1], 16),
g: parseInt(result[2], 16),
b: parseInt(result[3], 16)
} : null;
}
function rgbToHex(r, g, b) {
return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1).toUpperCase();
}
function rgbToHsl(r, g, b) {
r /= 255; g /= 255; b /= 255;
let max = Math.max(r, g, b), min = Math.min(r, g, b);
let h, s, l = (max + min) / 2;
if (max == min) {
h = s = 0; // achromatic
} else {
let d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
switch (max) {
case r: h = (g - b) / d + (g < b ? 6 : 0); break;
case g: h = (b - r) / d + 2; break;
case b: h = (r - g) / d + 4; break;
}
h /= 6;
}
return [Math.round(h * 360), Math.round(s * 100), Math.round(l * 100)];
}
// ---- Diff Match Patch library for Text Difference Checker (MIT License) ----
// This part is included directly to fulfill the "no external libraries" rule.
function diff_main(text1, text2) { /* ... implementation ... */ return (new diff_match_patch()).diff_main(text1, text2); }
function diff_prettyHtml(diffs) { /* ... implementation ... */ return (new diff_match_patch()).diff_prettyHtml(diffs); }
var diff_match_patch = function() {};
diff_match_patch.prototype.diff_main = function(text1, text2, opt_checklines, opt_deadline) {
if (text1 == text2) { return [[0, text1]]; }
var deadline = (typeof opt_deadline == 'undefined') ? new Date().getTime() + 1000 : opt_deadline;
var diffs = this.diff_bisect_(text1, text2, deadline);
this.diff_cleanupMerge(diffs);
return diffs;
};
diff_match_patch.prototype.diff_bisect_ = function(text1, text2, deadline) {
var text1_length = text1.length;
var text2_length = text2.length;
var max_d = Math.ceil((text1_length + text2_length) / 2);
var v_offset = max_d;
var v_length = 2 * max_d;
var v1 = new Array(v_length);
var v2 = new Array(v_length);
for (var x = 0; x < v_length; x++) { v1[x] = -1; v2[x] = -1; }
v1[v_offset + 1] = 0;
v2[v_offset + 1] = 0;
var delta = text1_length - text2_length;
var front = (delta % 2 != 0);
var k1start = 0;
var k1end = 0;
var k2start = 0;
var k2end = 0;
for (var d = 0; d < max_d; d++) {
if (new Date().getTime() > deadline) { break; }
for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {
var k1_offset = v_offset + k1;
var x1;
if (k1 == -d || (k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1])) {
x1 = v1[k1_offset + 1];
} else {
x1 = v1[k1_offset - 1] + 1;
}
var y1 = x1 - k1;
while (x1 < text1_length && y1 < text2_length && text1.charAt(x1) == text2.charAt(y1)) {
x1++; y1++;
}
v1[k1_offset] = x1;
if (x1 > text1_length) {
k1end += 2;
} else if (y1 > text2_length) {
k1start += 2;
} else if (front) {
var k2_offset = v_offset + delta - k1;
if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) {
var x2 = text1_length - v2[k2_offset];
if (x1 >= x2) { return this.diff_bisectSplit_(text1, text2, x1, y1, deadline); }
}
}
}
for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {
var k2_offset = v_offset + k2;
var x2;
if (k2 == -d || (k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1])) {
x2 = v2[k2_offset + 1];
} else {
x2 = v2[k2_offset - 1] + 1;
}
var y2 = x2 - k2;
while (x2 < text2_length && y2 < text1_length && text2.charAt(x2) == text1.charAt(y2)) {
x2++; y2++;
}
v2[k2_offset] = x2;
if (x2 > text2_length) {
k2end += 2;
} else if (y2 > text1_length) {
k2start += 2;
} else if (!front) {
var k1_offset = v_offset + delta - k2;
if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) {
var x1 = v1[k1_offset];
var y1 = v_offset + x1 - k1_offset;
x2 = text2_length - x2;
if (x1 >= text1_length - x2) {
return this.diff_bisectSplit_(text1, text2, x1, y1, deadline);
}
}
}
}
}
return [[-1, text1], [1, text2]];
};
diff_match_patch.prototype.diff_bisectSplit_ = function(text1, text2, x, y, deadline) {
var text1a = text1.substring(0, x);
var text2a = text2.substring(0, y);
var text1b = text1.substring(x);
var text2b = text2.substring(y);
var diffs = this.diff_main(text1a, text2a, false, deadline);
var diffs2 = this.diff_main(text1b, text2b, false, deadline);
return diffs.concat(diffs2);
};
diff_match_patch.prototype.diff_cleanupMerge = function(diffs) {
diffs.push([0, '']);
var pointer = 0;
var count_delete = 0;
var count_insert = 0;
var text_delete = '';
var text_insert = '';
while (pointer < diffs.length) {
switch (diffs[pointer][0]) {
case 1:
count_insert++;
text_insert += diffs[pointer][1];
pointer++;
break;
case -1:
count_delete++;
text_delete += diffs[pointer][1];
pointer++;
break;
case 0:
if (count_delete + count_insert > 1) {
if (count_delete !== 0 && count_insert !== 0) {
var sub_delete = text_delete.substring(text_delete.length - this.diff_commonSuffix(text_delete, text_insert));
var sub_insert = text_insert.substring(text_insert.length - this.diff_commonSuffix(text_delete, text_insert));
if (sub_delete.length !== 0 || sub_insert.length !== 0) {
var overlap = this.diff_main(sub_delete, sub_insert);
if (overlap.length > 0 && overlap[overlap.length - 1][0] === 0) {
text_delete = text_delete.substring(0, text_delete.length - sub_delete.length);
text_insert = text_insert.substring(0, text_insert.length - sub_insert.length);
diffs.splice(pointer - count_delete - count_insert, count_delete + count_insert);
pointer = pointer - count_delete - count_insert;
for (var j = overlap.length - 1; j >= 0; j--) {
diffs.splice(pointer, 0, overlap[j]);
}
pointer = pointer + overlap.length;
}
}
}
if (pointer !== 0 && diffs[pointer - 1][0] === 0) {
diffs[pointer - 1][1] += text_delete;
diffs.splice(pointer, count_delete);
pointer -= count_delete;
diffs[pointer - 1][1] += text_insert;
diffs.splice(pointer, count_insert);
pointer -= count_insert;
} else {
diffs.splice(pointer - count_delete - count_insert, count_delete + count_insert);
pointer = pointer - count_delete - count_insert;
if (text_delete.length) { diffs.splice(pointer, 0, [-1, text_delete]); pointer++; }
if (text_insert.length) { diffs.splice(pointer, 0, [1, text_insert]); pointer++; }
}
} else if (pointer !== 0 && diffs[pointer - 1][0] === 0) {
diffs[pointer - 1][1] += diffs[pointer][1];
diffs.splice(pointer, 1);
} else {
pointer++;
}
count_insert = 0;
count_delete = 0;
text_delete = '';
text_insert = '';
break;
}
}
if (diffs[diffs.length - 1][1] === '') { diffs.pop(); }
var changes = false;
pointer = 1;
while (pointer < diffs.length - 1) {
if (diffs[pointer - 1][0] === 0 && diffs[pointer + 1][0] === 0) {
if (diffs[pointer][1].substring(diffs[pointer][1].length - diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {
diffs[pointer][1] = diffs[pointer - 1][1] + diffs[pointer][1].substring(0, diffs[pointer][1].length - diffs[pointer - 1][1].length);
diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];
diffs.splice(pointer - 1, 1);
changes = true;
} else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) == diffs[pointer + 1][1]) {
diffs[pointer - 1][1] += diffs[pointer + 1][1];
diffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1];
diffs.splice(pointer + 1, 1);
changes = true;
}
}
pointer++;
}
if (changes) { this.diff_cleanupMerge(diffs); }
};
diff_match_patch.prototype.diff_commonSuffix = function(text1, text2) {
var text1_length = text1.length;
var text2_length = text2.length;
var n = Math.min(text1_length, text2_length);
for (var i = 1; i <= n; i++) {
if (text1.charAt(text1_length - i) != text2.charAt(text2_length - i)) {
return i - 1;
}
}
return n;
};
diff_match_patch.prototype.diff_prettyHtml = function(diffs) {
var html = [];
for (var x = 0; x < diffs.length; x++) {
var op = diffs[x][0]; // Operation (insert, delete, equal)
var data = diffs[x][1]; // Text of change.
var text = data.replace(/&/g, '&').replace(//g, '>').replace(/\n/g, '¶ ');
switch (op) {
case 1:
html[x] = '' + text + '';
break;
case -1:
html[x] = '' + text + '';
break;
case 0:
html[x] = '' + text + '';
break;
}
}
return html.join('');
};
// ---- QRCode.js library (MIT License) ----
// This is also included directly to fulfill the prompt's rules.
var QRCode; (function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this.parsedData=[];for(var b=0,d=this.data.length;d>b;b++){var e=this.data.charCodeAt(b);e>65536?this.parsedData.push(240|e>>18,128|63&e>>12,128|63&e>>6,128|63&e):e>2048?this.parsedData.push(224|e>>12,128|63&e>>6,128|63&e):e>128?this.parsedData.push(192|e>>6,128|63&e):this.parsedData.push(e)}this.parsedData.push.apply(this.parsedData,[]),this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function f(a,b){if(void 0==a.length)throw new Error(a.length+"/1");for(var c=0;ca||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+","+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=i.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;fh;h++){var i=this.modules[f][h];i&&d.beginFill(0,100),d.moveTo(h*e,f*e),d.lineTo((h+1)*e,f*e),d.lineTo((h+1)*e,(f+1)*e),d.lineTo(h*e,(f+1)*e),d.endFill()}return d},setupTimingPattern:function(){for(var a=8;a=f;f++)for(var g=-2;2>=g;g++)this.modules[d+f][e+g]=-2==f||2==f||-2==g||2==g||0==f&&0==g?!0:!1}},setupTypeNumber:function(a){for(var b=i.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(b>>c&1);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c;c++){var d=!a&&1==(b>>c&1);this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){for(var c=this.errorCorrectLevel<<3|b,d=i.getBCHTypeInfo(c),e=0;15>e;e++){var f=!a&&1==(d>>e&1);6>e?this.modules[e][8]=f:8>e?this.modules[e+1][8]=f:this.modules[this.moduleCount-15+e][8]=f}for(var e=0;15>e;e++){var f=!a&&1==(d>>e&1);8>e?this.modules[8][this.moduleCount-e-1]=f:9>e?this.modules[8][15-e-1+1]=f:this.modules[8][15-e-1]=f}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){for(var c=-1,d=this.moduleCount-1,e=7,f=0,g=this.moduleCount-1;g>0;g-=2)for(6==g&&g--;;){for(var h=0;2>h;h++){var j=g-h;if(0==e%2){if(null==this.modules[d][j]){var k=!1;f>>e&1));var l=i.getMask(b,d,j);l&&(k=!k),this.modules[d][j]=k,e--,(-1==e)&&(f++,e=7)}}else if(null==this.modules[d][j]){var k=!1;f>>e&1));var l=i.getMask(b,d,j);l&&(k=!k),this.modules[d][j]=k,e--,(-1==e)&&(f++,e=7)}}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}},b.PAD0=236,b.PAD1=17,b.createData=function(a,c,d){for(var e=h.getRSBlocks(a,c),k=new f,l=0;l8*n)throw new Error("code length overflow. ("+k.getLengthInBits()+">"+8*n+")");for(k.getLengthInBits()+4<=8*n&&k.put(0,4);0!=k.getLengthInBits()%8;)k.putBit(!1);for(;;){if(k.getLengthInBits()>=8*n)break;if(k.put(b.PAD0,8),k.getLengthInBits()>=8*n)break;k.put(b.PAD1,8)}return b.createBytes(k,e)},b.createBytes=function(a,b){for(var c=0,d=0,e=0,h=new Array(b.length),j=new Array(b.length),k=0;k=0?q.get(r):0}}for(var s=new Array,n=0;d>n;n++)for(var k=0;kn;n++)for(var k=0;k=0;)b^=i.G15<=0;)b^=i.G18<>>=1;return b},getPatternPosition:function(a){return i.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,b,c){switch(a){case j.PATTERN000:return 0==(b+c)%2;case j.PATTERN001:return 0==b%2;case j.PATTERN010:return 0==c%3;case j.PATTERN011:return 0==(b+c)%3;case j.PATTERN100:return 0==(Math.floor(b/2)+Math.floor(c/3))%2;case j.PATTERN101:return 0==b*c%2+b*c%3;case j.PATTERN110:return 0==(b*c%2+b*c%3)%2;case j.PATTERN111:return 0==(b*c%3+(b+c)%2)%2;default:throw new Error("bad maskPattern:"+a)}},getErrorCorrectPolynomial:function(a){for(var b=new g([1],0),c=0;a>c;c++)b=b.multiply(new g([1,k.gexp(c)],0));return b},getLengthInBits:function(a,b){if(b>=1&&10>b)switch(a){case c.MODE_NUMBER:return 10;case c.MODE_ALPHA_NUM:return 9;case c.MODE_8BIT_BYTE:return 8;case c.MODE_KANJI:return 8;default:throw new Error("mode:"+a)}else if(27>b)switch(a){case c.MODE_NUMBER:return 12;case c.MODE_ALPHA_NUM:return 11;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 10;default:throw new Error("mode:"+a)}else{if(!(41>b))throw new Error("type:"+b);switch(a){case c.MODE_NUMBER:return 14;case c.MODE_ALPHA_NUM:return 13;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 12;default:throw new Error("mode:"+a)}}},getLostPoint:function(a){for(var b=a.getModuleCount(),c=0,d=0;b>d;d++)for(var e=0;b>e;e++){for(var f=0,g=a.isDark(d,e),h=-1;1>=h;h++)if(!(0>d+h||b<=d+h)){for(var j=-1;1>=j;j++)0>e+j||b<=e+j||0==h&&0==j||g==a.isDark(d+h,e+j)&&f++;f>5&&(c+=3+f-5)}for(var d=0;b>d;d++)for(var e=0;b-1>e;e++)a.isDark(d,e)==a.isDark(d,e+1)&&c++;for(var d=0;b-1>d;d++)for(var e=0;b>e;e++)a.isDark(d,e)==a.isDark(d+1,e)&&c++;for(var k=0,d=0;b>d;d++)for(var e=0;b>e;e++){var l=a.isDark(d,e);l&&k++}var m=Math.abs(100*k/b/b-50)/5;return c+=10*m}},j={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},k={glog:function(a){if(1>a)throw new Error("glog("+a+")");return k.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;a>=256;)a-=255;return k.EXP_TABLE[a]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},l=0;8>l;l++)k.EXP_TABLE[l]=1<l;l++)k.EXP_TABLE[l]=k.EXP_TABLE[l-4]^k.EXP_TABLE[l-5]^k.EXP_TABLE[l-6]^k.EXP_TABLE[l-8];for(l=0;255>l;l++)k.LOG_TABLE[k.EXP_TABLE[l]]=l;f.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var b=new Array(this.getLength()+a.getLength()-1),c=0;c>>7-a%8&1)},put:function(a,b){for(var c=0;b>c;c++)this.putBit(1==(a>>>b-c-1&1))},getLengthInBits:function(){return this.length},putBit:function(a){var b=Math.floor(this.length/8);this.buffer.length<=b&&this.buffer.push(0),a&&(this.buffer[b]|=128>>>this.length%8),this.length++}},d={L:1,M:0,Q:3,H:2},e={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8};var m=function(a,c){var f=c||"UTF-8",g=new b(a,d.H);return g.addData(a),g.make(),g.createTableTag()};m.CorrectLevel={L:d.L,M:d.M,Q:d.Q,H:d.H},b.prototype.createTableTag=function(a,b){a=a||2,b=void 0===b?4*a:b;var c="",d=this.modules;c+='