ngx-colors
Version:
A beautiful color picker for angular that let you choose from a color palette, using sliders (Hue, Lightness, Alpha sliders) or through text input(hex, rgba, hsla)
14 lines • 2.91 kB
JavaScript
export function validColorValidator() {
return (control) => {
const value = control.value;
if (!value) {
return null;
}
const rgbTest = /^\s*rgba?\(\s*(1?\d{1,2}|2[0-4]\d|25[0-5])\s*,\s*(1?\d{1,2}|2[0-4]\d|25[0-5])\s*,\s*(1?\d{1,2}|2[0-4]\d|25[0-5])\s*(,\s*(0\.\d{1,2}|1))?\s*\)\s*$/i;
const hslTest = /^\s*hsla?\(\s*([0-2]?\d{1,2}|3[0-5]\d|360)\s*,\s*(0|[1-9]{1,2}|100)\%\s*,\s*(0|[1-9]{1,2}|100)\%\s*(,\s*(0\.\d{1,2}|1))?\s*\)\s*$/i;
const hexTest = /^#([A-Fa-f0-9]{8}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;
const colorValid = rgbTest.test(value) || hslTest.test(value) || hexTest.test(value);
return !colorValid ? { invalidColor: true } : null;
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWQtY29sb3IudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbG9ycy9zcmMvbGliL3ZhbGlkYXRvcnMvdmFsaWQtY29sb3IudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsT0FBTyxDQUFDLE9BQXdCLEVBQTJCLEVBQUU7UUFDM0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUU1QixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sT0FBTyxHQUNYLG9KQUFvSixDQUFDO1FBQ3ZKLE1BQU0sT0FBTyxHQUNYLG9JQUFvSSxDQUFDO1FBQ3ZJLE1BQU0sT0FBTyxHQUFHLG1EQUFtRCxDQUFDO1FBRXBFLE1BQU0sVUFBVSxHQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDckQsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkQ29sb3JWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcmdiVGVzdCA9XG4gICAgICAvXlxccypyZ2JhP1xcKFxccyooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSlcXHMqLFxccyooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSlcXHMqLFxccyooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSlcXHMqKCxcXHMqKDBcXC5cXGR7MSwyfXwxKSk/XFxzKlxcKVxccyokL2k7XG4gICAgY29uc3QgaHNsVGVzdCA9XG4gICAgICAvXlxccypoc2xhP1xcKFxccyooWzAtMl0/XFxkezEsMn18M1swLTVdXFxkfDM2MClcXHMqLFxccyooMHxbMS05XXsxLDJ9fDEwMClcXCVcXHMqLFxccyooMHxbMS05XXsxLDJ9fDEwMClcXCVcXHMqKCxcXHMqKDBcXC5cXGR7MSwyfXwxKSk/XFxzKlxcKVxccyokL2k7XG4gICAgY29uc3QgaGV4VGVzdCA9IC9eIyhbQS1GYS1mMC05XXs4fXxbQS1GYS1mMC05XXs2fXxbQS1GYS1mMC05XXszfSkkLztcblxuICAgIGNvbnN0IGNvbG9yVmFsaWQgPVxuICAgICAgcmdiVGVzdC50ZXN0KHZhbHVlKSB8fCBoc2xUZXN0LnRlc3QodmFsdWUpIHx8IGhleFRlc3QudGVzdCh2YWx1ZSk7XG4gICAgcmV0dXJuICFjb2xvclZhbGlkID8geyBpbnZhbGlkQ29sb3I6IHRydWUgfSA6IG51bGw7XG4gIH07XG59XG4iXX0=