@libs-ui/utils 0.2.337-0 → 0.2.338-0

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/color.d.ts CHANGED
@@ -9,3 +9,5 @@ export declare const colorContrastFromOrigin: (color: string) => Array<IColorCon
9
9
  export declare const rgbToHex: (rgb: any) => string;
10
10
  export declare const listColorDefine: Array<string>;
11
11
  export declare const getColorById: (str: string) => string;
12
+ export declare const detectAndCleanNearWhiteColors: (style: string) => string;
13
+ export declare const isNearWhite: (color: string) => boolean;
package/esm2022/color.mjs CHANGED
@@ -130,4 +130,76 @@ export const getColorById = (str) => {
130
130
  }
131
131
  return listColorDefine[Math.abs(hashString) % listColorDefine.length];
132
132
  };
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9jb2xvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7QUFDaEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBRXJCLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQUMsS0FBYSxFQUFFLFVBQWtCLEVBQUUsRUFBRTtJQUMvRSxPQUFPLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQztBQUNqRixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLEtBQWEsRUFBbUMsRUFBRTtJQUN4RixNQUFNLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztJQUN2QixJQUFJLGdCQUFnQixHQUFrQixFQUFFLENBQUM7SUFDekMsSUFBSSxlQUFlLEdBQWtCLEVBQUUsQ0FBQztJQUV4QyxJQUFJLGlCQUFpQixLQUFLLElBQUksRUFBRSxDQUFDO1FBQy9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNsRCxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RCxlQUFlLEdBQUcsY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FB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QyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUMvSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFRLEVBQUUsRUFBRTtJQUNuQyxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RFLENBQUMsQ0FBQztBQUNGLE1BQU0sUUFBUSxHQUFHLENBQUMsVUFBZSxFQUFFLEVBQUU7SUFDbkMsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkosQ0FBQyxDQUFDO0FBQ0YsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFXLEVBQUUsRUFBRTtJQUMvQixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0UsQ0FBQyxDQUFDO0FBRUYsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFXLEVBQUUsTUFBVyxFQUFFLEVBQUU7SUFDdkMsSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUV0QixPQUFPLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDbEIsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFrQjtJQUM1QyxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7Q0FDVixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBVyxFQUFVLEVBQUU7SUFDbEQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBRW5CLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDcEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUvQixVQUFVLEdBQUcsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQztRQUNuRCxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29sb3JDb250cmFzdEZyb21PcmlnaW4ge1xuICBzdGVwOiBudW1iZXI7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGxpZ2h0OiBzdHJpbmc7XG4gIGRhcms6IHN0cmluZztcbn1cblxuY29uc3Qgc3RlcCA9IDIwO1xuY29uc3QgcGVyY2VudCA9IDAuMDU7XG5cbmV4cG9ydCBjb25zdCBjb2xvclN0ZXBDb250cmFzdEZyb21PcmlnaW4gPSAoY29sb3I6IHN0cmluZywgc3RlcE51bWJlcjogbnVtYmVyKSA9PiB7XG4gIHJldHVybiBjb2xvckNvbnRyYXN0RnJvbU9yaWdpbihjb2xvcikuZmluZCgoaXRlbSkgPT4gaXRlbS5zdGVwID09PSBzdGVwTnVtYmVyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb2xvckNvbnRyYXN0RnJvbU9yaWdpbiA9IChjb2xvcjogc3RyaW5nKTogQXJyYXk8SUNvbG9yQ29udHJhc3RGcm9tT3JpZ2luPiA9PiB7XG4gIGNvbnN0IHBhcnNlZENvbG9yc0FycmF5ID0gcGFyc2VDb2xvclZhbHVlcyhjb2xvcik7XG4gIGNvbnN0IGNvbG9yczogYW55ID0gW107XG4gIGxldCBjYWxjdWxhdGVkU2hhZGVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIGxldCBjYWxjdWxhdGVkVGludHM6IEFycmF5PHN0cmluZz4gPSBbXTtcblxuICBpZiAocGFyc2VkQ29sb3JzQXJyYXkgIT09IG51bGwpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnNlZENvbG9yc0FycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjYWxjdWxhdGVkU2hhZGVzID0gY2FsY3VsYXRlU2hhZGVzKHBhcnNlZENvbG9yc0FycmF5W2ldKTtcbiAgICAgIGNhbGN1bGF0ZWRUaW50cyA9IGNhbGN1bGF0ZVRpbnRzKHBhcnNlZENvbG9yc0FycmF5W2ldKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBzdGVwOyBpKyspIHtcbiAgICAgIGNvbG9ycy5wdXNoKHsgc3RlcDogaSAqIDUsIGxhYmVsOiBgJHtpICogNX0lYCwgZGFyazogYCMke2NhbGN1bGF0ZWRTaGFkZXNbaV19YCwgbGlnaHQ6IGAjJHtjYWxjdWxhdGVkVGludHNbaV19YCB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29sb3JzO1xufTtcblxuY29uc3QgcGFyc2VDb2xvclZhbHVlcyA9IChjb2xvclZhbHVlczogYW55KSA9PiB7XG4gIGxldCBjb2xvclZhbHVlc0FycmF5ID0gY29sb3JWYWx1ZXMubWF0Y2goL1xcYlswLTlBLUZhLWZdezN9XFxifFswLTlBLUZhLWZdezZ9XFxiL2cpO1xuXG4gIGlmIChjb2xvclZhbHVlc0FycmF5KSB7XG4gICAgY29sb3JWYWx1ZXNBcnJheSA9IGNvbG9yVmFsdWVzQXJyYXkubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgIGlmIChpdGVtLmxlbmd0aCA9PT0gMykge1xuICAgICAgICBsZXQgbmV3SXRlbSA9IGl0ZW0udG9TdHJpbmcoKS5zcGxpdCgnJyk7XG5cbiAgICAgICAgbmV3SXRlbSA9IG5ld0l0ZW0ucmVkdWNlKChhY2M6IGFueSwgaXQ6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBhY2MgKyBpdCArIGl0O1xuICAgICAgICB9LCAnJyk7XG5cbiAgICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGNvbG9yVmFsdWVzQXJyYXk7XG59O1xuXG5jb25zdCBjYWxjdWxhdGVTaGFkZXMgPSAoY29sb3JWYWx1ZTogYW55KSA9PiB7XG4gIHJldHVybiBjYWxjdWxhdGUoY29sb3JWYWx1ZSwgcmdiU2hhZGUpLmNvbmNhdCgnMDAwMDAwJyk7XG59O1xuXG5jb25zdCBjYWxjdWxhdGVUaW50cyA9IChjb2xvclZhbHVlOiBhbnkpID0+IHtcbiAgcmV0dXJuIGNhbGN1bGF0ZShjb2xvclZhbHVlLCByZ2JUaW50KS5jb25jYXQoJ2ZmZmZmZicpO1xufTtcblxuY29uc3QgY2FsY3VsYXRlID0gKGNvbG9yVmFsdWU6IGFueSwgc2hhZGVPclRpbnQ6IGFueSkgPT4ge1xuICBjb25zdCBjb2xvciA9IGhleFRvUkdCKGNvbG9yVmFsdWUpO1xuICBjb25zdCBzaGFkZVZhbHVlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RlcDsgaSsrKSB7XG4gICAgc2hhZGVWYWx1ZXNbaV0gPSByZ2JUb0hleChzaGFkZU9yVGludChjb2xvciwgaSkpO1xuICB9XG5cbiAgcmV0dXJuIHNoYWRlVmFsdWVzO1xufTtcblxuY29uc3QgcmdiU2hhZGUgPSAocmdiOiBhbnksIGk6IGFueSkgPT4ge1xuICByZXR1cm4geyByZWQ6IHJnYi5yZWQgKiAoMSAtIHBlcmNlbnQgKiBpKSwgZ3JlZW46IHJnYi5ncmVlbiAqICgxIC0gcGVyY2VudCAqIGkpLCBibHVlOiByZ2IuYmx1ZSAqICgxIC0gcGVyY2VudCAqIGkpIH07XG59O1xuY29uc3QgcmdiVGludCA9IChyZ2I6IGFueSwgaTogYW55KSA9PiB7XG4gIHJldHVybiB7IHJlZDogcmdiLnJlZCArICgyNTUgLSByZ2IucmVkKSAqIGkgKiBwZXJjZW50LCBncmVlbjogcmdiLmdyZWVuICsgKDI1NSAtIHJnYi5ncmVlbikgKiBpICogcGVyY2VudCwgYmx1ZTogcmdiLmJsdWUgKyAoMjU1IC0gcmdiLmJsdWUpICogaSAqIHBlcmNlbnQgfTtcbn07XG5cbmV4cG9ydCBjb25zdCByZ2JUb0hleCA9IChyZ2I6IGFueSkgPT4ge1xuICByZXR1cm4gaW50VG9IZXgocmdiLnJlZCkgKyBpbnRUb0hleChyZ2IuZ3JlZW4pICsgaW50VG9IZXgocmdiLmJsdWUpO1xufTtcbmNvbnN0IGhleFRvUkdCID0gKGNvbG9yVmFsdWU6IGFueSkgPT4ge1xuICByZXR1cm4geyByZWQ6IHBhcnNlSW50KGNvbG9yVmFsdWUuc3Vic3RyKDAsIDIpLCAxNiksIGdyZWVuOiBwYXJzZUludChjb2xvclZhbHVlLnN1YnN0cigyLCAyKSwgMTYpLCBibHVlOiBwYXJzZUludChjb2xvclZhbHVlLnN1YnN0cig0LCAyKSwgMTYpIH07XG59O1xuY29uc3QgaW50VG9IZXggPSAocmdiaW50OiBhbnkpID0+IHtcbiAgcmV0dXJuIHBhZChNYXRoLm1pbihNYXRoLm1heChNYXRoLnJvdW5kKHJnYmludCksIDApLCAyNTUpLnRvU3RyaW5nKDE2KSwgMik7XG59O1xuXG5jb25zdCBwYWQgPSAobnVtYmVyOiBhbnksIGxlbmd0aDogYW55KSA9PiB7XG4gIGxldCBzdHIgPSAnJyArIG51bWJlcjtcblxuICB3aGlsZSAoc3RyLmxlbmd0aCA8IGxlbmd0aCkge1xuICAgIHN0ciA9ICcwJyArIHN0cjtcbiAgfVxuXG4gIHJldHVybiBzdHI7XG59O1xuXG5leHBvcnQgY29uc3QgbGlzdENvbG9yRGVmaW5lOiBBcnJheTxzdHJpbmc+ID0gW1xuICAnI0U2MjIyMicsXG4gICcjQjgxQjFCJyxcbiAgJyNFQjRFNEUnLFxuICAnI0Y5NzMxNicsXG4gICcjQzc1QzEyJyxcbiAgJyNGQThGNDUnLFxuICAnI0ZGQjcwMCcsXG4gICcjQ0M5MjAwJyxcbiAgJyNGRkM1MzMnLFxuICAnIzg0Q0MxNicsXG4gICcjNkFBMzEyJyxcbiAgJyM5ZGQ2NDUnLFxuICAnIzAwQkM2MicsXG4gICcjMDBBNzU3JyxcbiAgJyMzM0RBOEEnLFxuICAnIzA2QjZENCcsXG4gICcjMUI1OUM0JyxcbiAgJyM0RThDRjcnLFxuICAnIzBFQTVFOScsXG4gICcjMUI1OUM0JyxcbiAgJyM0RThDRjcnLFxuICAnIzIyNkZGNScsXG4gICcjMUI1OUM0JyxcbiAgJyM0RThDRjcnLFxuICAnIzYzNjZGMScsXG4gICcjNEY1MkMxJyxcbiAgJyM4Mjg1RjQnLFxuICAnIzVCMDRCMycsXG4gICcjNDkwMzhGJyxcbiAgJyM3QzM2QzInLFxuICAnI0Q5NDZFRicsXG4gICcjQUUzOEJGJyxcbiAgJyNFMTZCRjInLFxuICAnI0VDNDg5OScsXG4gICcjQkQzQTdBJyxcbiAgJyNGMDZEQUQnLFxuICAnI0Y0M0Y1RScsXG4gICcjQzMzMjRCJyxcbiAgJyNGNjY1N0UnLFxuICAnIzc1NzM4MCcsXG4gICcjNUU1QzY2JyxcbiAgJyM5MThGOTknLFxuICAnIzIwMjAyMCcsXG4gICcjMUExQTFBJyxcbiAgJyM0RDRENEQnLFxuXTtcblxuZXhwb3J0IGNvbnN0IGdldENvbG9yQnlJZCA9IChzdHI6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGxldCBoYXNoU3RyaW5nID0gMDtcblxuICBpZiAoIXN0cikge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoYXIgPSBzdHIuY2hhckNvZGVBdChpKTtcblxuICAgIGhhc2hTdHJpbmcgPSAoaGFzaFN0cmluZyA8PCA1KSAtIGhhc2hTdHJpbmcgKyBjaGFyO1xuICAgIGhhc2hTdHJpbmcgPSBoYXNoU3RyaW5nICYgaGFzaFN0cmluZztcbiAgfVxuXG4gIHJldHVybiBsaXN0Q29sb3JEZWZpbmVbTWF0aC5hYnMoaGFzaFN0cmluZykgJSBsaXN0Q29sb3JEZWZpbmUubGVuZ3RoXTtcbn07XG4iXX0=
133
+ export const detectAndCleanNearWhiteColors = (style) => {
134
+ if (!style)
135
+ return style;
136
+ const styleMap = {};
137
+ const rules = style
138
+ .split(';')
139
+ .map((s) => s.trim())
140
+ .filter(Boolean);
141
+ for (const rule of rules) {
142
+ const [keyRaw, valueRaw] = rule.split(':').map((s) => s.trim());
143
+ if (!keyRaw || !valueRaw)
144
+ continue;
145
+ const key = keyRaw.toLowerCase();
146
+ styleMap[key] = valueRaw;
147
+ }
148
+ const colorKeys = ['color', 'background', 'background-color', 'border-color'];
149
+ for (const key of colorKeys) {
150
+ const value = styleMap[key];
151
+ if (value && isNearWhite(value)) {
152
+ delete styleMap[key];
153
+ }
154
+ }
155
+ return Object.entries(styleMap)
156
+ .map(([k, v]) => `${k}: ${v}`)
157
+ .join('; ');
158
+ };
159
+ export const isNearWhite = (color) => {
160
+ if (!color)
161
+ return false;
162
+ color = color.trim().toLowerCase();
163
+ // Chuyển HEX, RGB hoặc tên màu sang r,g,b
164
+ const parseColor = (input) => {
165
+ if (input.startsWith('#')) {
166
+ let hex = input.slice(1);
167
+ if (hex.length === 3)
168
+ hex = hex
169
+ .split('')
170
+ .map((c) => c + c)
171
+ .join('');
172
+ const r = parseInt(hex.slice(0, 2), 16);
173
+ const g = parseInt(hex.slice(2, 4), 16);
174
+ const b = parseInt(hex.slice(4, 6), 16);
175
+ return [r, g, b];
176
+ }
177
+ const rgbMatch = input.match(/rgba?\s*\(([^)]+)\)/);
178
+ if (rgbMatch) {
179
+ const [r, g, b] = rgbMatch[1]
180
+ .split(',')
181
+ .slice(0, 3)
182
+ .map((v) => parseFloat(v.trim()));
183
+ return [r, g, b];
184
+ }
185
+ const whiteNames = ['white', 'snow', 'ivory', 'ghostwhite', 'floralwhite', 'seashell', 'whitesmoke'];
186
+ if (whiteNames.includes(input))
187
+ return [255, 255, 255];
188
+ return null;
189
+ };
190
+ const rgb = parseColor(color);
191
+ if (!rgb)
192
+ return false;
193
+ const [r, g, b] = rgb;
194
+ // Tính luminance (độ sáng)
195
+ const luminance = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;
196
+ // Tính saturation (độ bão hòa)
197
+ const max = Math.max(r, g, b) / 255;
198
+ const min = Math.min(r, g, b) / 255;
199
+ const saturation = max === 0 ? 0 : (max - min) / max;
200
+ // Chỉ coi là "gần trắng" nếu:
201
+ // 1. rất sáng (luminance > 0.95)
202
+ // 2. và rất ít màu (saturation < 0.1)
203
+ return luminance > 0.95 && saturation < 0.1;
204
+ };
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9jb2xvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7QUFDaEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBRXJCLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQUMsS0FBYSxFQUFFLFVBQWtCLEVBQUUsRUFBRTtJQUMvRSxPQUFPLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQztBQUNqRixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLEtBQWEsRUFBbUMsRUFBRTtJQUN4RixNQUFNLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztJQUN2QixJQUFJLGdCQUFnQixHQUFrQixFQUFFLENBQUM7SUFDekMsSUFBSSxlQUFlLEdBQWtCLEVBQUUsQ0FBQztJQUV4QyxJQUFJLGlCQUFpQixLQUFLLElBQUksRUFBRSxDQUFDO1FBQy9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNsRCxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RCxlQUFlLEdBQUcsY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FB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QyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUMvSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFRLEVBQUUsRUFBRTtJQUNuQyxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RFLENBQUMsQ0FBQztBQUNGLE1BQU0sUUFBUSxHQUFHLENBQUMsVUFBZSxFQUFFLEVBQUU7SUFDbkMsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkosQ0FBQyxDQUFDO0FBQ0YsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFXLEVBQUUsRUFBRTtJQUMvQixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENB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VUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3JHLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztJQUVGLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRXZCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUV0QiwyQkFBMkI7SUFDM0IsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUUvRCwrQkFBK0I7SUFDL0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNwQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3BDLE1BQU0sVUFBVSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBRXJELDhCQUE4QjtJQUM5QixpQ0FBaUM7SUFDakMsc0NBQXNDO0lBQ3RDLE9BQU8sU0FBUyxHQUFHLElBQUksSUFBSSxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQzlDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbG9yQ29udHJhc3RGcm9tT3JpZ2luIHtcbiAgc3RlcDogbnVtYmVyO1xuICBsYWJlbDogc3RyaW5nO1xuICBsaWdodDogc3RyaW5nO1xuICBkYXJrOiBzdHJpbmc7XG59XG5cbmNvbnN0IHN0ZXAgPSAyMDtcbmNvbnN0IHBlcmNlbnQgPSAwLjA1O1xuXG5leHBvcnQgY29uc3QgY29sb3JTdGVwQ29udHJhc3RGcm9tT3JpZ2luID0gKGNvbG9yOiBzdHJpbmcsIHN0ZXBOdW1iZXI6IG51bWJlcikgPT4ge1xuICByZXR1cm4gY29sb3JDb250cmFzdEZyb21PcmlnaW4oY29sb3IpLmZpbmQoKGl0ZW0pID0+IGl0ZW0uc3RlcCA9PT0gc3RlcE51bWJlcik7XG59O1xuXG5leHBvcnQgY29uc3QgY29sb3JDb250cmFzdEZyb21PcmlnaW4gPSAoY29sb3I6IHN0cmluZyk6IEFycmF5PElDb2xvckNvbnRyYXN0RnJvbU9yaWdpbj4gPT4ge1xuICBjb25zdCBwYXJzZWRDb2xvcnNBcnJheSA9IHBhcnNlQ29sb3JWYWx1ZXMoY29sb3IpO1xuICBjb25zdCBjb2xvcnM6IGFueSA9IFtdO1xuICBsZXQgY2FsY3VsYXRlZFNoYWRlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBsZXQgY2FsY3VsYXRlZFRpbnRzOiBBcnJheTxzdHJpbmc+ID0gW107XG5cbiAgaWYgKHBhcnNlZENvbG9yc0FycmF5ICE9PSBudWxsKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJzZWRDb2xvcnNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgY2FsY3VsYXRlZFNoYWRlcyA9IGNhbGN1bGF0ZVNoYWRlcyhwYXJzZWRDb2xvcnNBcnJheVtpXSk7XG4gICAgICBjYWxjdWxhdGVkVGludHMgPSBjYWxjdWxhdGVUaW50cyhwYXJzZWRDb2xvcnNBcnJheVtpXSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gc3RlcDsgaSsrKSB7XG4gICAgICBjb2xvcnMucHVzaCh7IHN0ZXA6IGkgKiA1LCBsYWJlbDogYCR7aSAqIDV9JWAsIGRhcms6IGAjJHtjYWxjdWxhdGVkU2hhZGVzW2ldfWAsIGxpZ2h0OiBgIyR7Y2FsY3VsYXRlZFRpbnRzW2ldfWAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbG9ycztcbn07XG5cbmNvbnN0IHBhcnNlQ29sb3JWYWx1ZXMgPSAoY29sb3JWYWx1ZXM6IGFueSkgPT4ge1xuICBsZXQgY29sb3JWYWx1ZXNBcnJheSA9IGNvbG9yVmFsdWVzLm1hdGNoKC9cXGJbMC05QS1GYS1mXXszfVxcYnxbMC05QS1GYS1mXXs2fVxcYi9nKTtcblxuICBpZiAoY29sb3JWYWx1ZXNBcnJheSkge1xuICAgIGNvbG9yVmFsdWVzQXJyYXkgPSBjb2xvclZhbHVlc0FycmF5Lm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICBpZiAoaXRlbS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgbGV0IG5ld0l0ZW0gPSBpdGVtLnRvU3RyaW5nKCkuc3BsaXQoJycpO1xuXG4gICAgICAgIG5ld0l0ZW0gPSBuZXdJdGVtLnJlZHVjZSgoYWNjOiBhbnksIGl0OiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gYWNjICsgaXQgKyBpdDtcbiAgICAgICAgfSwgJycpO1xuXG4gICAgICAgIHJldHVybiBuZXdJdGVtO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBjb2xvclZhbHVlc0FycmF5O1xufTtcblxuY29uc3QgY2FsY3VsYXRlU2hhZGVzID0gKGNvbG9yVmFsdWU6IGFueSkgPT4ge1xuICByZXR1cm4gY2FsY3VsYXRlKGNvbG9yVmFsdWUsIHJnYlNoYWRlKS5jb25jYXQoJzAwMDAwMCcpO1xufTtcblxuY29uc3QgY2FsY3VsYXRlVGludHMgPSAoY29sb3JWYWx1ZTogYW55KSA9PiB7XG4gIHJldHVybiBjYWxjdWxhdGUoY29sb3JWYWx1ZSwgcmdiVGludCkuY29uY2F0KCdmZmZmZmYnKTtcbn07XG5cbmNvbnN0IGNhbGN1bGF0ZSA9IChjb2xvclZhbHVlOiBhbnksIHNoYWRlT3JUaW50OiBhbnkpID0+IHtcbiAgY29uc3QgY29sb3IgPSBoZXhUb1JHQihjb2xvclZhbHVlKTtcbiAgY29uc3Qgc2hhZGVWYWx1ZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ZXA7IGkrKykge1xuICAgIHNoYWRlVmFsdWVzW2ldID0gcmdiVG9IZXgoc2hhZGVPclRpbnQoY29sb3IsIGkpKTtcbiAgfVxuXG4gIHJldHVybiBzaGFkZVZhbHVlcztcbn07XG5cbmNvbnN0IHJnYlNoYWRlID0gKHJnYjogYW55LCBpOiBhbnkpID0+IHtcbiAgcmV0dXJuIHsgcmVkOiByZ2IucmVkICogKDEgLSBwZXJjZW50ICogaSksIGdyZWVuOiByZ2IuZ3JlZW4gKiAoMSAtIHBlcmNlbnQgKiBpKSwgYmx1ZTogcmdiLmJsdWUgKiAoMSAtIHBlcmNlbnQgKiBpKSB9O1xufTtcbmNvbnN0IHJnYlRpbnQgPSAocmdiOiBhbnksIGk6IGFueSkgPT4ge1xuICByZXR1cm4geyByZWQ6IHJnYi5yZWQgKyAoMjU1IC0gcmdiLnJlZCkgKiBpICogcGVyY2VudCwgZ3JlZW46IHJnYi5ncmVlbiArICgyNTUgLSByZ2IuZ3JlZW4pICogaSAqIHBlcmNlbnQsIGJsdWU6IHJnYi5ibHVlICsgKDI1NSAtIHJnYi5ibHVlKSAqIGkgKiBwZXJjZW50IH07XG59O1xuXG5leHBvcnQgY29uc3QgcmdiVG9IZXggPSAocmdiOiBhbnkpID0+IHtcbiAgcmV0dXJuIGludFRvSGV4KHJnYi5yZWQpICsgaW50VG9IZXgocmdiLmdyZWVuKSArIGludFRvSGV4KHJnYi5ibHVlKTtcbn07XG5jb25zdCBoZXhUb1JHQiA9IChjb2xvclZhbHVlOiBhbnkpID0+IHtcbiAgcmV0dXJuIHsgcmVkOiBwYXJzZUludChjb2xvclZhbHVlLnN1YnN0cigwLCAyKSwgMTYpLCBncmVlbjogcGFyc2VJbnQoY29sb3JWYWx1ZS5zdWJzdHIoMiwgMiksIDE2KSwgYmx1ZTogcGFyc2VJbnQoY29sb3JWYWx1ZS5zdWJzdHIoNCwgMiksIDE2KSB9O1xufTtcbmNvbnN0IGludFRvSGV4ID0gKHJnYmludDogYW55KSA9PiB7XG4gIHJldHVybiBwYWQoTWF0aC5taW4oTWF0aC5tYXgoTWF0aC5yb3VuZChyZ2JpbnQpLCAwKSwgMjU1KS50b1N0cmluZygxNiksIDIpO1xufTtcblxuY29uc3QgcGFkID0gKG51bWJlcjogYW55LCBsZW5ndGg6IGFueSkgPT4ge1xuICBsZXQgc3RyID0gJycgKyBudW1iZXI7XG5cbiAgd2hpbGUgKHN0ci5sZW5ndGggPCBsZW5ndGgpIHtcbiAgICBzdHIgPSAnMCcgKyBzdHI7XG4gIH1cblxuICByZXR1cm4gc3RyO1xufTtcblxuZXhwb3J0IGNvbnN0IGxpc3RDb2xvckRlZmluZTogQXJyYXk8c3RyaW5nPiA9IFtcbiAgJyNFNjIyMjInLFxuICAnI0I4MUIxQicsXG4gICcjRUI0RTRFJyxcbiAgJyNGOTczMTYnLFxuICAnI0M3NUMxMicsXG4gICcjRkE4RjQ1JyxcbiAgJyNGRkI3MDAnLFxuICAnI0NDOTIwMCcsXG4gICcjRkZDNTMzJyxcbiAgJyM4NENDMTYnLFxuICAnIzZBQTMxMicsXG4gICcjOWRkNjQ1JyxcbiAgJyMwMEJDNjInLFxuICAnIzAwQTc1NycsXG4gICcjMzNEQThBJyxcbiAgJyMwNkI2RDQnLFxuICAnIzFCNTlDNCcsXG4gICcjNEU4Q0Y3JyxcbiAgJyMwRUE1RTknLFxuICAnIzFCNTlDNCcsXG4gICcjNEU4Q0Y3JyxcbiAgJyMyMjZGRjUnLFxuICAnIzFCNTlDNCcsXG4gICcjNEU4Q0Y3JyxcbiAgJyM2MzY2RjEnLFxuICAnIzRGNTJDMScsXG4gICcjODI4NUY0JyxcbiAgJyM1QjA0QjMnLFxuICAnIzQ5MDM4RicsXG4gICcjN0MzNkMyJyxcbiAgJyNEOTQ2RUYnLFxuICAnI0FFMzhCRicsXG4gICcjRTE2QkYyJyxcbiAgJyNFQzQ4OTknLFxuICAnI0JEM0E3QScsXG4gICcjRjA2REFEJyxcbiAgJyNGNDNGNUUnLFxuICAnI0MzMzI0QicsXG4gICcjRjY2NTdFJyxcbiAgJyM3NTczODAnLFxuICAnIzVFNUM2NicsXG4gICcjOTE4Rjk5JyxcbiAgJyMyMDIwMjAnLFxuICAnIzFBMUExQScsXG4gICcjNEQ0RDREJyxcbl07XG5cbmV4cG9ydCBjb25zdCBnZXRDb2xvckJ5SWQgPSAoc3RyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBsZXQgaGFzaFN0cmluZyA9IDA7XG5cbiAgaWYgKCFzdHIpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFyID0gc3RyLmNoYXJDb2RlQXQoaSk7XG5cbiAgICBoYXNoU3RyaW5nID0gKGhhc2hTdHJpbmcgPDwgNSkgLSBoYXNoU3RyaW5nICsgY2hhcjtcbiAgICBoYXNoU3RyaW5nID0gaGFzaFN0cmluZyAmIGhhc2hTdHJpbmc7XG4gIH1cblxuICByZXR1cm4gbGlzdENvbG9yRGVmaW5lW01hdGguYWJzKGhhc2hTdHJpbmcpICUgbGlzdENvbG9yRGVmaW5lLmxlbmd0aF07XG59O1xuXG5leHBvcnQgY29uc3QgZGV0ZWN0QW5kQ2xlYW5OZWFyV2hpdGVDb2xvcnMgPSAoc3R5bGU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmICghc3R5bGUpIHJldHVybiBzdHlsZTtcblxuICBjb25zdCBzdHlsZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBjb25zdCBydWxlcyA9IHN0eWxlXG4gICAgLnNwbGl0KCc7JylcbiAgICAubWFwKChzKSA9PiBzLnRyaW0oKSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xuXG4gIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xuICAgIGNvbnN0IFtrZXlSYXcsIHZhbHVlUmF3XSA9IHJ1bGUuc3BsaXQoJzonKS5tYXAoKHMpID0+IHMudHJpbSgpKTtcbiAgICBpZiAoIWtleVJhdyB8fCAhdmFsdWVSYXcpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGtleSA9IGtleVJhdy50b0xvd2VyQ2FzZSgpO1xuICAgIHN0eWxlTWFwW2tleV0gPSB2YWx1ZVJhdztcbiAgfVxuXG4gIGNvbnN0IGNvbG9yS2V5cyA9IFsnY29sb3InLCAnYmFja2dyb3VuZCcsICdiYWNrZ3JvdW5kLWNvbG9yJywgJ2JvcmRlci1jb2xvciddO1xuICBmb3IgKGNvbnN0IGtleSBvZiBjb2xvcktleXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHN0eWxlTWFwW2tleV07XG4gICAgaWYgKHZhbHVlICYmIGlzTmVhcldoaXRlKHZhbHVlKSkge1xuICAgICAgZGVsZXRlIHN0eWxlTWFwW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHN0eWxlTWFwKVxuICAgIC5tYXAoKFtrLCB2XSkgPT4gYCR7a306ICR7dn1gKVxuICAgIC5qb2luKCc7ICcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzTmVhcldoaXRlID0gKGNvbG9yOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgaWYgKCFjb2xvcikgcmV0dXJuIGZhbHNlO1xuICBjb2xvciA9IGNvbG9yLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gIC8vIENodXnhu4NuIEhFWCwgUkdCIGhv4bq3YyB0w6puIG3DoHUgc2FuZyByLGcsYlxuICBjb25zdCBwYXJzZUNvbG9yID0gKGlucHV0OiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudWxsID0+IHtcbiAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aCgnIycpKSB7XG4gICAgICBsZXQgaGV4ID0gaW5wdXQuc2xpY2UoMSk7XG4gICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gMylcbiAgICAgICAgaGV4ID0gaGV4XG4gICAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAgIC5tYXAoKGMpID0+IGMgKyBjKVxuICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgIGNvbnN0IHIgPSBwYXJzZUludChoZXguc2xpY2UoMCwgMiksIDE2KTtcbiAgICAgIGNvbnN0IGcgPSBwYXJzZUludChoZXguc2xpY2UoMiwgNCksIDE2KTtcbiAgICAgIGNvbnN0IGIgPSBwYXJzZUludChoZXguc2xpY2UoNCwgNiksIDE2KTtcbiAgICAgIHJldHVybiBbciwgZywgYl07XG4gICAgfVxuXG4gICAgY29uc3QgcmdiTWF0Y2ggPSBpbnB1dC5tYXRjaCgvcmdiYT9cXHMqXFwoKFteKV0rKVxcKS8pO1xuICAgIGlmIChyZ2JNYXRjaCkge1xuICAgICAgY29uc3QgW3IsIGcsIGJdID0gcmdiTWF0Y2hbMV1cbiAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgIC5tYXAoKHYpID0+IHBhcnNlRmxvYXQodi50cmltKCkpKTtcbiAgICAgIHJldHVybiBbciwgZywgYl07XG4gICAgfVxuXG4gICAgY29uc3Qgd2hpdGVOYW1lcyA9IFsnd2hpdGUnLCAnc25vdycsICdpdm9yeScsICdnaG9zdHdoaXRlJywgJ2Zsb3JhbHdoaXRlJywgJ3NlYXNoZWxsJywgJ3doaXRlc21va2UnXTtcbiAgICBpZiAod2hpdGVOYW1lcy5pbmNsdWRlcyhpbnB1dCkpIHJldHVybiBbMjU1LCAyNTUsIDI1NV07XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgY29uc3QgcmdiID0gcGFyc2VDb2xvcihjb2xvcik7XG4gIGlmICghcmdiKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgW3IsIGcsIGJdID0gcmdiO1xuXG4gIC8vIFTDrW5oIGx1bWluYW5jZSAoxJHhu5kgc8OhbmcpXG4gIGNvbnN0IGx1bWluYW5jZSA9ICgwLjIxMjYgKiByICsgMC43MTUyICogZyArIDAuMDcyMiAqIGIpIC8gMjU1O1xuXG4gIC8vIFTDrW5oIHNhdHVyYXRpb24gKMSR4buZIGLDo28gaMOyYSlcbiAgY29uc3QgbWF4ID0gTWF0aC5tYXgociwgZywgYikgLyAyNTU7XG4gIGNvbnN0IG1pbiA9IE1hdGgubWluKHIsIGcsIGIpIC8gMjU1O1xuICBjb25zdCBzYXR1cmF0aW9uID0gbWF4ID09PSAwID8gMCA6IChtYXggLSBtaW4pIC8gbWF4O1xuXG4gIC8vIENo4buJIGNvaSBsw6AgXCJn4bqnbiB0cuG6r25nXCIgbuG6v3U6XG4gIC8vIDEuIHLhuqV0IHPDoW5nIChsdW1pbmFuY2UgPiAwLjk1KVxuICAvLyAyLiB2w6AgcuG6pXQgw610IG3DoHUgKHNhdHVyYXRpb24gPCAwLjEpXG4gIHJldHVybiBsdW1pbmFuY2UgPiAwLjk1ICYmIHNhdHVyYXRpb24gPCAwLjE7XG59O1xuIl19
@@ -2589,6 +2589,78 @@ const getColorById = (str) => {
2589
2589
  }
2590
2590
  return listColorDefine[Math.abs(hashString) % listColorDefine.length];
2591
2591
  };
2592
+ const detectAndCleanNearWhiteColors = (style) => {
2593
+ if (!style)
2594
+ return style;
2595
+ const styleMap = {};
2596
+ const rules = style
2597
+ .split(';')
2598
+ .map((s) => s.trim())
2599
+ .filter(Boolean);
2600
+ for (const rule of rules) {
2601
+ const [keyRaw, valueRaw] = rule.split(':').map((s) => s.trim());
2602
+ if (!keyRaw || !valueRaw)
2603
+ continue;
2604
+ const key = keyRaw.toLowerCase();
2605
+ styleMap[key] = valueRaw;
2606
+ }
2607
+ const colorKeys = ['color', 'background', 'background-color', 'border-color'];
2608
+ for (const key of colorKeys) {
2609
+ const value = styleMap[key];
2610
+ if (value && isNearWhite(value)) {
2611
+ delete styleMap[key];
2612
+ }
2613
+ }
2614
+ return Object.entries(styleMap)
2615
+ .map(([k, v]) => `${k}: ${v}`)
2616
+ .join('; ');
2617
+ };
2618
+ const isNearWhite = (color) => {
2619
+ if (!color)
2620
+ return false;
2621
+ color = color.trim().toLowerCase();
2622
+ // Chuyển HEX, RGB hoặc tên màu sang r,g,b
2623
+ const parseColor = (input) => {
2624
+ if (input.startsWith('#')) {
2625
+ let hex = input.slice(1);
2626
+ if (hex.length === 3)
2627
+ hex = hex
2628
+ .split('')
2629
+ .map((c) => c + c)
2630
+ .join('');
2631
+ const r = parseInt(hex.slice(0, 2), 16);
2632
+ const g = parseInt(hex.slice(2, 4), 16);
2633
+ const b = parseInt(hex.slice(4, 6), 16);
2634
+ return [r, g, b];
2635
+ }
2636
+ const rgbMatch = input.match(/rgba?\s*\(([^)]+)\)/);
2637
+ if (rgbMatch) {
2638
+ const [r, g, b] = rgbMatch[1]
2639
+ .split(',')
2640
+ .slice(0, 3)
2641
+ .map((v) => parseFloat(v.trim()));
2642
+ return [r, g, b];
2643
+ }
2644
+ const whiteNames = ['white', 'snow', 'ivory', 'ghostwhite', 'floralwhite', 'seashell', 'whitesmoke'];
2645
+ if (whiteNames.includes(input))
2646
+ return [255, 255, 255];
2647
+ return null;
2648
+ };
2649
+ const rgb = parseColor(color);
2650
+ if (!rgb)
2651
+ return false;
2652
+ const [r, g, b] = rgb;
2653
+ // Tính luminance (độ sáng)
2654
+ const luminance = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;
2655
+ // Tính saturation (độ bão hòa)
2656
+ const max = Math.max(r, g, b) / 255;
2657
+ const min = Math.min(r, g, b) / 255;
2658
+ const saturation = max === 0 ? 0 : (max - min) / max;
2659
+ // Chỉ coi là "gần trắng" nếu:
2660
+ // 1. rất sáng (luminance > 0.95)
2661
+ // 2. và rất ít màu (saturation < 0.1)
2662
+ return luminance > 0.95 && saturation < 0.1;
2663
+ };
2592
2664
 
2593
2665
  class UtilsKeyCodeConstant {
2594
2666
  static MAC_ENTER = 3;
@@ -3267,5 +3339,5 @@ const getObjectSize = (obj) => {
3267
3339
  * Generated bundle index. Do not edit.
3268
3340
  */
3269
3341
 
3270
- export { AudioExtList, CHARACTER_DATA_EMPTY, COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE, COMMUNICATE_MICRO_PREFIX_TYPE, DEFAULT_START_PAGE_0, DocumentExtList, ENCODE_URI_PATTERN, ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MAX_LENGTH, ERROR_MESSAGE_MAX_VALID, ERROR_MESSAGE_MIN_LENGTH, ERROR_MESSAGE_MIN_VALID, ERROR_MESSAGE_PATTEN_VALID, ExcelExtList, ImageExtList, LINK_IMAGE_ERROR_TOKEN_INJECT, PROCESS_BAR_STANDARD_CONFIG_DEFAULT_TOKEN_INJECT, PROCESS_BAR_STEPS_CONFIG_DEFAULT_TOKEN_INJECT, UtilsCache, UtilsCommunicateMicro, UtilsCommunicateMicroKeyGlobal, UtilsHttpParamsRequest, UtilsHttpParamsRequestInstance, UtilsKeyCodeConstant, UtilsLanguageConstants, UtilsUrlSearchParams, VideoExtList, addArrayToSet, base64Decode, base64Encode, capitalize, checkMouseOverInContainer, checkViewInScreen, cloneDeep, cloneIBoundingClientRect, colorContrastFromOrigin, colorStepContrastFromOrigin, convertBase64ToBlob, convertBlobToFile, convertFileToBase64, convertFileToBase64_ObjectUrl, convertHtmlToDivBlocks, convertObjectToSignal, convertSetToArray, convertSignalToObject, convertUrlToFile, createUniqueRandomIntGenerator, decodeEscapeHtml, decodeURI, decrypt, decrypt3rd, deleteUnicode, downloadFileByUrl, downloadFileByUrlUseXmlRequest, downloadImageFromELement, encodeURI, encrypt, encrypt3rd, endCodeUrl, escapeHtml, firstLetterToUpperCase, formatDate, formatNumber, formatTextCompare, fullNameFormat, generateInterface, get, getColorById, getDayjs, getDeltaFromHTML, getDeviceInfo, getDocumentByString, getDragEventByElement, getEventNameHandleClick, getFileExtension, getHTMLFromQuill, getKeyCacheByArrayObject, getLabelBySizeFile, getObjectSize, getPlatFromBrowser, getSmartAxisScale, getViewport, groupBy, hasDangerousConstructorName, highlightByKeyword, insertContentWithRange, isArray, isAsyncObject, isBrowserAPIObject, isBrowserGlobalObject, isBuiltInObject, isDOMObject, isDangerousObject, isDayjsObject, isDifferenceDay, isDifferenceMonth, isDifferenceYear, isEmbedFrame, isEmpty, isEqual, isFalsy, isFile, isFrameworkObject, isIncludeAudioExtList, isIncludeDocumentExtList, isIncludeImageExtList, isIncludeVideoExtList, isMap, isNil, isRegExp, isReturnAsIsObject, isSafeToProcess, isSet, isSkippableObject, isSpecialObject, isTruthy, isTypeAudio, isTypeFile, isTypeImage, isTypeVideo, keyBy, listColorDefine, md5, omitBy, patterProtocolUrl, patternAccount, patternDomain, patternEmail, patternEmoji, patternEncodeUri, patternGetFieldByRuleFieldReplace, patternHostUrl, patternKey, patternMobilePhone, patternName, patternNameProfile, patternNameSpecial, patternNameUtf8, patternNumber, patternPem, patternPhone, patternRuleFieldReplace, patternTax, patternUrl, processPasteData, protectString, range, removeEmoji, revealString, rgbToHex, set, setCaretPosition, setDefaultTimeZone, setKeyCrypto, setKeyCrypto3rd, setStylesElement, uniqBy, unwrapSignal, updateFunctionCheckEmbedFrame, updateFunctionFormatDate, updateFunctionXssFilter, uppercaseByPosition, uuid, viewDataNumberByLanguage, xssFilter };
3342
+ export { AudioExtList, CHARACTER_DATA_EMPTY, COMMUNICATE_MICRO_KEY_GET_ALL_MESSAGE, COMMUNICATE_MICRO_PREFIX_TYPE, DEFAULT_START_PAGE_0, DocumentExtList, ENCODE_URI_PATTERN, ERROR_MESSAGE_EMPTY_VALID, ERROR_MESSAGE_MAX_LENGTH, ERROR_MESSAGE_MAX_VALID, ERROR_MESSAGE_MIN_LENGTH, ERROR_MESSAGE_MIN_VALID, ERROR_MESSAGE_PATTEN_VALID, ExcelExtList, ImageExtList, LINK_IMAGE_ERROR_TOKEN_INJECT, PROCESS_BAR_STANDARD_CONFIG_DEFAULT_TOKEN_INJECT, PROCESS_BAR_STEPS_CONFIG_DEFAULT_TOKEN_INJECT, UtilsCache, UtilsCommunicateMicro, UtilsCommunicateMicroKeyGlobal, UtilsHttpParamsRequest, UtilsHttpParamsRequestInstance, UtilsKeyCodeConstant, UtilsLanguageConstants, UtilsUrlSearchParams, VideoExtList, addArrayToSet, base64Decode, base64Encode, capitalize, checkMouseOverInContainer, checkViewInScreen, cloneDeep, cloneIBoundingClientRect, colorContrastFromOrigin, colorStepContrastFromOrigin, convertBase64ToBlob, convertBlobToFile, convertFileToBase64, convertFileToBase64_ObjectUrl, convertHtmlToDivBlocks, convertObjectToSignal, convertSetToArray, convertSignalToObject, convertUrlToFile, createUniqueRandomIntGenerator, decodeEscapeHtml, decodeURI, decrypt, decrypt3rd, deleteUnicode, detectAndCleanNearWhiteColors, downloadFileByUrl, downloadFileByUrlUseXmlRequest, downloadImageFromELement, encodeURI, encrypt, encrypt3rd, endCodeUrl, escapeHtml, firstLetterToUpperCase, formatDate, formatNumber, formatTextCompare, fullNameFormat, generateInterface, get, getColorById, getDayjs, getDeltaFromHTML, getDeviceInfo, getDocumentByString, getDragEventByElement, getEventNameHandleClick, getFileExtension, getHTMLFromQuill, getKeyCacheByArrayObject, getLabelBySizeFile, getObjectSize, getPlatFromBrowser, getSmartAxisScale, getViewport, groupBy, hasDangerousConstructorName, highlightByKeyword, insertContentWithRange, isArray, isAsyncObject, isBrowserAPIObject, isBrowserGlobalObject, isBuiltInObject, isDOMObject, isDangerousObject, isDayjsObject, isDifferenceDay, isDifferenceMonth, isDifferenceYear, isEmbedFrame, isEmpty, isEqual, isFalsy, isFile, isFrameworkObject, isIncludeAudioExtList, isIncludeDocumentExtList, isIncludeImageExtList, isIncludeVideoExtList, isMap, isNearWhite, isNil, isRegExp, isReturnAsIsObject, isSafeToProcess, isSet, isSkippableObject, isSpecialObject, isTruthy, isTypeAudio, isTypeFile, isTypeImage, isTypeVideo, keyBy, listColorDefine, md5, omitBy, patterProtocolUrl, patternAccount, patternDomain, patternEmail, patternEmoji, patternEncodeUri, patternGetFieldByRuleFieldReplace, patternHostUrl, patternKey, patternMobilePhone, patternName, patternNameProfile, patternNameSpecial, patternNameUtf8, patternNumber, patternPem, patternPhone, patternRuleFieldReplace, patternTax, patternUrl, processPasteData, protectString, range, removeEmoji, revealString, rgbToHex, set, setCaretPosition, setDefaultTimeZone, setKeyCrypto, setKeyCrypto3rd, setStylesElement, uniqBy, unwrapSignal, updateFunctionCheckEmbedFrame, updateFunctionFormatDate, updateFunctionXssFilter, uppercaseByPosition, uuid, viewDataNumberByLanguage, xssFilter };
3271
3343
  //# sourceMappingURL=libs-ui-utils.mjs.map