AutorÃa | Ultima modificación | Ver Log |
{"version":3,"file":"lc_color_picker.min.js","sources":["../src/lc_color_picker.js"],"sourcesContent":["/**\n * lc_color_picker.js - The colorpicker for modern web\n * Version: 2.0.0\n * Author: Luca Montanari (LCweb)\n * Website: https://lcweb.it\n * Licensed under the MIT license\n */\n\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Chart = factory());\n })(this, (function () { 'use strict';\n\n if(typeof(window.lc_color_picker) != 'undefined') {return false;} // prevent multiple script inits\n\n\n /*** vars ***/\n let debounced_vars = [],\n window_width = null,\n\n style_generated = null,\n active_trigger = null,\n active_trig_id = null,\n\n active_solid = null,\n active_opacity = null,\n active_gradien
t = null,\n active_mode = 'linear-gradient',\n\n sel_grad_step = 0, // selected gradient step\n gradient_data = {\n deg: 0,\n radial_circle: false,\n steps: [\n //{color : null, opacity: null, position : null}\n ],\n };\n\n\n /*** default options ***/\n const def_opts = {\n modes : ['linear-gradient'], // (array) containing supported modes (solid | linear-gradient | radial-gradient)\n open_on_focus : true, // (bool) whether to open the picker when field is focused\n transparency : true, // (bool) whether to allow colors transparency tune\n dark_theme : false, // (bool) whether to enable dark picker theme\n no_input_mode : false, // (bool) whether to stretch the trigger in order to cover the whole input field\n wrap_width : 'auto', // (string) defines the wrapper width. \"auto\" to leave it up to CSS, \"inherit\" to statically copy input fiel
d width, or any other CSS sizing\n preview_style : { // (object) defining shape and position of the in-field preview\n input_padding : 35, // extra px padding eventually added to the target input to not cover text\n side : 'right', // right or left\n width : 30,\n separator_color : '#ccc', // (string) CSS color applird to preview element as separator\n },\n fallback_colors : ['#008080', 'linear-gradient(90deg, #fff 0%, #000 100%)'], // (array) defining default colors used when trigger field has no value. First parameter for solid color, second for gradient\n\n on_change : null, // function(new_value, target_field) {}, - triggered every time field value changes. Passes value and target field object as parameters\n\n labels : [ // (array) option used to translate script texts\n 'click to change color',\n 'Solid',\n 'Linear Gradient',\n 'Radial Gradie
nt',\n 'add gradient step',\n 'gradient angle',\n 'gradient shape',\n 'color',\n 'opacity',\n ],\n };\n\n\n // shortcut var to target the text input only\n const right_input_selector = 'input:not([type=\"color\"])';\n\n\n\n // input value check custom event\n const lccp_ivc_event = function(picker_id, hide_picker = false) {\n return new CustomEvent('lccp_input_val_check', {\n bubbles : true,\n detail: {\n picker_id : picker_id,\n hide_picker : hide_picker\n }\n });\n };\n\n\n\n /*** hide picker cicking outside ***/\n document.addEventListener('click', function(e) {\n const picker = document.querySelector(\"#lc-color-picker.lccp-shown\");\n if(!picker || e.target.classList.contains('lccp-preview')) {\n return true;\n }\n\n // is an element within a trigger?\n for (const trigger of document.getElementsB
yClassName('lccp-preview')) {\n if(trigger.contains(e.target)) {\n return true;\n }\n }\n\n // clicked on the same colorpicker field? keep visible\n if(e.target.parentNode && e.target.parentNode.classList && e.target.parentNode.classList.contains('lccp-el-wrap') && document.getElementById(active_trig_id)) {\n return true;\n }\n\n // close if clicked element is not in the picker\n if(!picker.contains(e.target) && !e.target.classList.contains('lccp-shown')) {\n const picker_id = picker.getAttribute('data-trigger-id'),\n $input = document.getElementById(picker_id).parentNode.querySelector(right_input_selector);\n\n $input.dispatchEvent(lccp_ivc_event(picker_id, true));\n }\n return true;\n });\n\n\n /* hide picker on screen resizing */\n window.addEventListener('resize', function(e) {\n const picker = document.querySelector(\"#lc-color-picker.lccp-shown\");\n
if(!picker || window_width == window.innerWidth) {\n return true;\n }\n\n // check field value\n const picker_id = picker.getAttribute('data-trigger-id'),\n $input = document.getElementById(picker_id).parentNode.querySelector(right_input_selector);\n\n $input.dispatchEvent(lccp_ivc_event(picker_id, true));\n });\n\n\n /* extend string object to ReplaceArray */\n String.prototype.lccpReplaceArray = function(find, replace) {\n let replaceString = this;\n let regex;\n\n for (var i = 0; i < find.length; i++) {\n const regex = new RegExp(find[i], \"g\");\n replaceString = (typeof(replace) == 'object') ? replaceString.replace(regex, replace[i]) : replaceString.replace(regex, replace);\n }\n return replaceString;\n };\n\n\n\n\n /*** plugin class ***/\n window.lc_color_picker = function(attachTo, options = {}) {\n let cp_uniqid, // unique ID assigned to this colorpicker instance
\n last_tracked_col;\n\n this.attachTo = attachTo;\n if(!this.attachTo) {\n return console.error('You must provide a valid selector string first argument');\n }\n\n // override options\n if(typeof(options) != 'object') {\n return console.error('Options must be an object');\n }\n\n const bkp_opts = options;\n options = Object.assign({}, def_opts, options);\n\n if(typeof(bkp_opts.preview_style) != 'undefined') {\n options.preview_style = Object.assign({}, def_opts.preview_style, bkp_opts.preview_style);\n }\n\n\n\n /* initialize */\n this.init = function() {\n const $this = this;\n\n // Generate style\n if(!style_generated) {\n this.generate_style();\n style_generated = true;\n }\n\n\n // assign to each target element\n maybe_querySelectorAll(attachTo).forEach(function(el) {\n
if(el.tagName == 'INPUT' && el.getAttribute('type') != 'text') {\n return;\n }\n\n // do not initialize twice\n if(el.parentNode.classList.length && el.parentNode.classList.contains('lcslt_wrap')) {\n return;\n }\n\n $this.wrap_element(el);\n });\n };\n\n\n\n /* wrap target element to allow trigger display */\n this.wrap_element = function(el) {\n cp_uniqid = Math.random().toString(36).substr(2, 9);\n\n const $this = this,\n side_prop = (options.preview_style.side == 'right') ? 'borderRightWidth' : 'borderLeftWidth';\n\n let trigger_css =\n `width:${ (options.no_input_mode) ? 'calc(100% - '+ parseInt(getComputedStyle(el)['borderRightWidth'], 10) +'px - '+ parseInt(getComputedStyle(el)['borderLeftWidth'], 10) +'px);' : options.preview_style.width +'px;'}` +\n\n options.preview_styl
e.side +':'+ parseInt(getComputedStyle(el)[side_prop], 10) +'px;'+\n\n 'top:'+ parseInt(getComputedStyle(el)['borderTopWidth'], 10) +'px;' +\n\n 'height: calc(100% - '+ parseInt(getComputedStyle(el)['borderTopWidth'], 10) +'px - '+ parseInt(getComputedStyle(el)['borderBottomWidth'], 10) +'px);';\n\n let trigger_upper_css =\n trigger_css +\n 'background:'+ el.value +';' +\n 'border-color:'+ options.preview_style.separator_color +';'\n\n let div = document.createElement('div');\n div.className = 'lccp-preview-'+ options.preview_style.side;\n div.setAttribute('data-for', el.getAttribute('name'));\n\n // static width from input?\n if(options.wrap_width != 'auto') {\n div.style.width = (options.wrap_width == 'inherit') ? Math.round(el.getBoundingClientRect().width) + 'px' : options.wrap_width;\n }\n\n const direct_colorpicker_code = (!opt
ions.transparency && options.modes.length == 1 && options.modes[0] == 'linear-gradient') ?\n '<input type=\"color\" name=\"'+ cp_uniqid +'_direct_cp\" value=\"'+ el.value +'\" class=\"lccp-direct-cp-f\" />' : '';\n\n div.classList.add(\"lccp-el-wrap\");\n div.innerHTML =\n '<span class=\"lccp-preview-bg\" style=\"'+ trigger_css +'\"></span>' +\n '<span id=\"'+ cp_uniqid +'\" class=\"lccp-preview\" style=\"'+ trigger_upper_css +'\" title=\"'+ options.labels[0] +'\"></span>' +\n direct_colorpicker_code;\n\n el.parentNode.insertBefore(div, el);\n div.appendChild(el);\n\n // input padding\n if(!options.no_input_mode) {\n if(options.preview_style.side == 'right') {\n div.querySelector('input:not([type=\"color\"])').style.paddingRight = options.preview_style.input_padding +'px';\n } else {\n div.querySelector('input:not([ty
pe=\"color\"])').style.paddingLeft = options.preview_style.input_padding +'px';\n }\n }\n\n\n // direct browser colorpicker? track changes\n if(div.querySelector('.lccp-direct-cp-f')) {\n div.querySelector('.lccp-direct-cp-f').addEventListener(\"input\", (e) => {\n\n div.querySelector('input:not([type=\"color\"])').value = e.target.value;\n div.querySelector('.lccp-preview').style.background = e.target.value;\n });\n }\n\n\n // event to show picker\n const trigger = document.getElementById(cp_uniqid);\n trigger.addEventListener(\"click\", (e) => {\n this.show_picker(trigger);\n });\n\n\n\n // show on field focus?\n if(options.open_on_focus) {\n div.querySelector(right_input_selector).addEventListener(\"focus\", (e) => {\n if(trigger != active_trigger) {\n
if(active_trigger) {\n document.getElementById('lc-color-picker').classList.remove('lccp-shown');\n active_trigger = null;\n }\n\n $this.debounce('open_on_focus', 10, 'show_picker', trigger);\n }\n });\n }\n\n\n // sync manually-inputed data in the field\n div.querySelector(right_input_selector).addEventListener(\"keyup\", (e) => {\n if(e.keyCode == 9 || e.key === 'Enter' || e.keyCode === 13) {\n return;\n }\n\n const is_active_trigger_and_opened = (active_trig_id = cp_uniqid && document.querySelector(\"#lc-color-picker.lccp-shown\")) ? true : false;\n\n active_trigger = trigger;\n active_trig_id = cp_uniqid;\n\n $this.debounce('manual_input_sync', 10, 'val_to_picker', true);\n\n if(is_active_trigger_and_opened) {\
n $this.debounce('manual_input_sync_cp', 10, 'append_color_picker', false);\n $this.debounce('reopen_picker_after_manual_edit', 10, 'show_picker', trigger);\n }\n });\n\n\n // be sure input value is managed on focusout\n div.querySelector(right_input_selector).addEventListener(\"focusout\", (e) => {\n // not if this field's picker is shown and focus is on \"body\"\n if(document.activeElement.tagName == 'BODY' && document.querySelector('#lc-color-picker.lccp-shown[data-trigger-id=\"'+ active_trig_id +'\"]')) {\n return true;\n }\n\n e.target.dispatchEvent(lccp_ivc_event(active_trig_id, true));\n });\n\n\n // custom event - check field validity and eventually use fallback values\n div.querySelector(right_input_selector).addEventListener(\"lccp_input_val_check\", (e) => {\n const curr_val = e.target.va
lue,\n test = document.createElement('div');\n\n test.style.background = curr_val;\n let browser_val = test.style.background,\n val_to_set;\n\n if(!curr_val.trim().length || !browser_val) {\n if(e.target.value.toLowerCase().indexOf('gradient') === -1) {\n val_to_set = (options.fallback_colors[0].toLowerCase().indexOf('rgba') === -1) ? $this.RGB_to_hex(options.fallback_colors[0]) : options.fallback_colors[0];\n }\n else {\n val_to_set = options.fallback_colors[1];\n }\n }\n else {\n // browser already fixes minor things\n browser_val = browser_val.replaceAll('0.', '.').replace(/rgb\\([^\\)]+\\)/g, (rgb) => {\n return $this.RGB_to_hex(rgb);\n });\n\n val_to_set = (browser_val.trim
().toLowerCase().substr(0, 4) == 'rgb(') ? $this.RGB_to_hex(browser_val) : browser_val;\n }\n\n if(val_to_set != curr_val) {\n e.target.value = val_to_set;\n }\n\n if(typeof(options.on_change) == 'function' && last_tracked_col != val_to_set) {\n options.on_change.call($this, val_to_set, e.target);\n }\n\n if(e.detail.picker_id == active_trig_id) {\n active_trigger = null;\n active_trig_id = null;\n }\n\n\n // also hide picker?\n const $target = document.querySelector('#lc-color-picker.lccp-shown[data-trigger-id=\"'+ e.detail.picker_id +'\"]');\n if($target) {\n\n $target.classList.remove('lccp-shown');\n document.getElementById(\"lc-color-picker\").remove();\n }\n });\n };\n\n\n\n /* show picker */\n th
is.show_picker = function(trigger) {\n if(document.querySelector('#lc-color-picker.lccp-shown[data-trigger-id=\"'+ active_trig_id +'\"]')) {\n document.getElementById(\"lc-color-picker\").remove();\n active_trigger = null;\n active_trig_id = null\n\n return false;\n }\n\n // direct colorpicker usage? Not for Firefox is \"show on focus\" is enabled\n const direct_colorpicker = trigger.parentNode.querySelector('.lccp-direct-cp-f');\n if(\n direct_colorpicker &&\n (\n !options.open_on_focus ||\n (options.open_on_focus && !navigator.userAgent.toLowerCase().includes('firefox'))\n )\n ) {\n direct_colorpicker.value = active_solid;\n direct_colorpicker.click();\n return true;\n }\n\n\n window_width = window.innerWidth;\n active_trigg
er = trigger;\n active_trig_id = cp_uniqid;\n\n this.val_to_picker();\n this.append_color_picker();\n\n const picker = document.getElementById('lc-color-picker'),\n picker_w = picker.offsetWidth,\n picker_h = picker.offsetHeight,\n at_offsety = active_trigger.getBoundingClientRect(),\n at_h = parseInt(active_trigger.clientHeight, 10) + parseInt(getComputedStyle(active_trigger)['borderTopWidth'], 10) + parseInt(getComputedStyle(active_trigger)['borderBottomWidth'], 10),\n y_pos = (parseInt(at_offsety.y, 10) + parseInt(window.pageYOffset, 10) + at_h + 5);\n\n // left pos control - also checking side overflows\n let left = (parseInt(at_offsety.right, 10) - picker_w);\n if(left < 0) {\n left = 0;\n }\n\n // mobile? show it centered\n if(window.innerWidth < 700) {\n l
eft = Math.floor( (window.innerWidth - picker_w) / 2);\n }\n\n // top or bottom ?\n const y_pos_css = (y_pos + picker_h - document.documentElement.scrollTop < window.innerHeight) ?\n 'top:'+ y_pos :\n 'transform: translate3d(0, calc((100% + '+ (active_trigger.offsetHeight + 10) +'px) * -1), 0); top:'+ y_pos;\n\n picker.setAttribute('style', y_pos_css +'px; left: '+ left +'px;');\n picker.classList.add('lccp-shown');\n };\n\n\n\n /* handles input value and prepres data for the picker */\n this.val_to_picker = function(from_manual_input) {\n if(!active_trigger) {\n return false;\n }\n const val = active_trigger.parentNode.querySelector(right_input_selector).value.trim().toLowerCase();\n last_tracked_col = val;\n\n // check validity\n let test = document.createElement('div');\n test.style.background = val;\n\
n //// set active colors\n // if no value found\n if(!val.length || !test.style.background.length) {\n active_solid = options.fallback_colors[0];\n active_gradient = options.fallback_colors[1];\n active_mode = 'linear-gradient';\n\n /* if(val.indexOf('linear-gradient') !== -1) {\n }\n else if(val.indexOf('radial-gradient') !== -1) {\n active_mode = 'radial-gradient';\n }\n else {\n active_mode = 'solid';\n } */\n }\n else {\n\n active_mode = 'linear-gradient';\n active_gradient = val;\n // find which value type has been passed\n /* if(val.indexOf('linear-gradient') !== -1) {\n }\n else if(val.indexOf('radial-gradient') !== -1) {\n active_mode = 'radial-gradient';\n
}\n else {\n active_mode = 'solid';\n }\n\n if(active_mode == 'solid') {\n active_solid = val;\n active_gradient = options.fallback_colors[1];\n }\n else{\n active_solid = options.fallback_colors[0];\n } */\n }\n active_trigger.style.background = val;\n\n if(!from_manual_input || (from_manual_input && options.open_on_focus)) {\n // elaborate solid color data (color and alpha)\n //this.load_solid_data(active_solid);\n // elaborate gradient data\n if(active_gradient) {\n this.load_gradient_data(active_gradient);\n }\n }\n };\n\n\n\n /* elaborate solid color data (color and alpha) loading into active_solid and active_opacity */\n this.load_solid_data = function(raw_data) {\n act
ive_opacity = 1;\n\n // rgba\n if(raw_data.indexOf('rgba') !== -1) {\n const data = this.RGBA_to_hexA(raw_data);\n active_solid = data[0];\n active_opacity = data[1];\n }\n\n // rgb\n else if(raw_data.indexOf('rgba') !== -1) {\n active_solid = this.RGB_to_hex(raw_data);\n }\n\n // hex\n else {\n active_solid = this.short_hex_fix(raw_data);\n }\n };\n\n\n\n /* elaborate gradient data loading into gradient_data */\n this.load_gradient_data = function(raw_data) {\n const $this = this;\n const is_radial = (raw_data.indexOf('radial-gradient') === -1) ? false : true;\n\n // solve issues with inner RGB|RGBA and turn everything into RGBA\n raw_data = raw_data\n .replace(/,\\./g, ',0.').replace(/ \\./g, ' 0.')\n .replace(/rgba?\\((\\d+),\\s*(\\d+),\\s*(
\\d+)(?:,\\s*(\\d+(?:\\.\\d+)?))?\\)/g, 'rgbaZ($1|$2|$3|$4)')\n .replace(/\\|\\)/g, '|1)');\n\n // names to deg\n raw_data = raw_data\n .replace('top right', '45deg').replace('right top', '45deg')\n .replace('bottom right', '135deg').replace('bottom right', '135deg')\n .replace('top left', '315deg').replace('left top', '315deg')\n .replace('bottom left', '225deg').replace('bottom left', '225deg')\n .replace('right', '90deg').replace('left', '270deg').replace('top', '0deg').replace('bottom', '180deg');\n\n // be sure deg or shape is defined\n if(is_radial && raw_data.indexOf('ellipse') === -1 && raw_data.indexOf('circle') === -1) {\n raw_data.replace('\\\\(', '(ellipse ');\n }\n if(!is_radial && raw_data.indexOf('deg') === -1) {\n raw_data.replace('\\\\(', '(180deg');\n }\n\n // process\n raw_d
ata = raw_data.lccpReplaceArray(\n ['linear-gradient', 'radial-gradient', '', '\\\\(', 'to', '\\\\)'],\n ''\n );\n\n // split steps\n const raw_steps = raw_data.split(',');\n const fallback_multiplier = 100 / raw_steps.length;\n\n gradient_data.steps = [];\n raw_steps.some(function(raw_step, index) {\n\n // direction on first index\n if(!index) {\n if(is_radial) {\n gradient_data.radial_circle = (raw_step.indexOf('circle') === -1) ? false : true;\n } else {\n gradient_data.deg = parseInt(raw_step.replace('deg', ''), 10);\n }\n }\n\n // {color : null, opacity: null, position : null}\n else {\n raw_step = raw_step.trim().split(' ');\n let position = '';\n\n // position\n
if(raw_step.length < 2) {\n if(index === 1) {\n position = '0%';\n }\n else if(index == (raw_steps.length - 1)) {\n position = '100%';\n }\n else {\n position = (fallback_multiplier * index) +'%';\n }\n }\n else {\n position = raw_step[1];\n }\n\n // color\n let raw_color = raw_step[0],\n opacity = 1;\n\n // normalize to hex\n if(raw_color.indexOf('rgbaZ') !== -1) {\n const col_arr = $this.RGBA_to_hexA(\n raw_color.replace('rgbaZ', 'rgba').replace(/\\|/g, ',')\n );\n\n raw_color = col_arr[0];\n
opacity = col_arr[1];\n }\n\n gradient_data.steps.push({\n color : $this.short_hex_fix(raw_color),\n opacity: opacity,\n position : parseInt(position, 10)\n });\n }\n });\n };\n\n\n\n /* handles RGBA string returning a two elements array: hex and alpha */\n this.RGBA_to_hexA = function(raw_data) {\n raw_data = raw_data.lccpReplaceArray(['rgba', '\\\\(', '\\\\)'], '');\n const rgba_arr = raw_data.split(',')\n\n let alpha = (typeof(rgba_arr[3]) != 'undefined') ? rgba_arr[3] : '1';\n if(alpha.substring(0, 1) == '.') {\n alpha = 0 + alpha;\n }\n rgba_arr.splice(3, 1);\n\n return [\n this.RGB_to_hex('rgb('+ rgba_arr.join(',') +')'),\n parseFloat(alpha)\n ];\n };\n\n\n\n /* convert RGB to hex *
/\n this.RGB_to_hex = function(rgb) {\n rgb = rgb.lccpReplaceArray(['rgb', '\\\\(', '\\\\)'], '');\n const rgb_arr = rgb.split(',');\n\n if(rgb_arr.length < 3) {\n return '';\n }\n\n let r = parseInt(rgb_arr[0].trim(), 10).toString(16),\n g = parseInt(rgb_arr[1].trim(), 10).toString(16),\n b = parseInt(rgb_arr[2].trim(), 10).toString(16);\n\n if (r.length == 1) {r = \"0\" + r;}\n if (g.length == 1) {g = \"0\" + g;}\n if (b.length == 1) {b = \"0\" + b;}\n\n return this.shorten_hex(r + g + b);\n };\n\n\n\n /* if possible, shortenize hex string */\n this.shorten_hex = function(hex) {\n hex = hex.replace('#', '').split('');\n\n if(hex.length >= 6) {\n if(\n hex[0] === hex[1] &&\n hex[2] === hex[3] &&\n hex[4] === hex[5]\n ) {\n
return '#'+ hex[0] + hex[2] + hex[4];\n }\n }\n\n return '#'+ hex.join('');\n };\n\n\n\n /* convert short hex to full format */\n this.short_hex_fix = function(hex) {\n if(hex.length == 4) {\n const a = hex.split('');\n hex = a[0] + a[1] + a[1] + a[2] + a[2] + a[3] + a[3];\n }\n\n return hex.toLowerCase();\n };\n\n\n\n /* convert hex to RGB */\n this.hex_to_RGB = function(h) {\n let r = 0, g = 0, b = 0;\n\n // 3 digits\n if (h.length == 4) {\n r = \"0x\" + h[1] + h[1];\n g = \"0x\" + h[2] + h[2];\n b = \"0x\" + h[3] + h[3];\n\n // 6 digits\n } else if (h.length == 7) {\n r = \"0x\" + h[1] + h[2];\n g = \"0x\" + h[3] + h[4];\n b = \"0x\" + h[5] + h[6];\n }\n\n return \"rgb(\"+ +r + \", \" +
+g + \", \" + +b + \")\";\n };\n\n\n\n /* convert hex to RGB */\n this.hex_to_RGBA = function(h, opacity) {\n if(parseFloat(opacity) === 1) {\n return this.shorten_hex(h);\n }\n\n let rgb = this.hex_to_RGB(h);\n return rgb.replace('(', 'a(').replace(')', ', '+ opacity.toString().replace('0.', '.') +')');\n };\n\n\n\n\n /* append color container picker to the body */\n this.append_color_picker = function(on_manual_input_change = false) {\n const $this = this;\n\n /* if(document.getElementById(\"lc-color-picker\") && !on_manual_input_change) {\n document.getElementById(\"lc-color-picker\").remove();\n } */\n\n const theme_class = (options.dark_theme) ? 'lccp_dark_theme' : 'lccp_light_theme',\n bg = (active_mode == 'solid') ? active_solid : active_gradient,\n shown_solid = (active_mode == 'solid') ?
active_solid : gradient_data.steps[0].color,\n shown_opacity = (active_mode == 'solid') ? active_opacity : (options.transparency) ? gradient_data.steps[0].opacity : null,\n print_grad_code = (options.modes.indexOf('linear-gradient') !== -1 || options.modes.indexOf('radial-gradient') !== -1) ? true : false;\n\n\n // start code\n let picker = '',\n picker_el;\n\n if(on_manual_input_change && document.getElementById(\"lc-color-picker\")) {\n picker_el = document.getElementById(\"lc-color-picker\");\n picker_el.setAttribute('data-mode', active_mode);\n picker_el.setAttribute('data-trigger-id', cp_uniqid);\n }\n else {\n picker = '<div id=\"lc-color-picker\" class=\"'+ theme_class +'\" data-mode=\"'+ active_mode +'\" data-trigger-id=\"'+ cp_uniqid +'\">';\n }\n\n\n // modes select\n /* if(options.modes.length >= 1) {\
n picker += `\n <div id=\"lccp_modes_wrap\">\n <span class=\"${(active_mode == 'solid') ? 'lccp_sel_mode' : ''}\" ${(options.modes.indexOf('solid') === -1) ? 'style=\"display: none;\"' : ''} data-mode=\"solid\">${ options.labels[1] }</span>\n <span class=\"${(active_mode == 'linear-gradient') ? 'lccp_sel_mode' : ''}\" ${(options.modes.indexOf('linear-gradient') === -1) ? 'style=\"display: none;\"' : ''} data-mode=\"linear-gradient\">${ options.labels[2] }</span>\n <span class=\"${(active_mode == 'radial-gradient') ? 'lccp_sel_mode' : ''}\" ${(options.modes.indexOf('radial-gradient') === -1) ? 'style=\"display: none;\"' : ''} data-mode=\"radial-gradient\">${ options.labels[3] }</span>\n </div>`;\n } */\n\n\n // gradient wizard\n if(print_grad_code) {\n picker += `\n <div class=\"lccp_gradient_wizard\" ${ (active_mode == 'solid') ? 'style=\"display
: none;\"' : '' }>\n <div class=\"lccp_gradient lccp_gradient-bg\"></div>\n <div class=\"lccp_gradient\" style=\"background: ${ active_gradient }\" title=\"${ options.labels[4] }\"></div>\n\n <div class=\"lccp_gradient_ranges\"></div>\n\n <div class=\"pccp_deg_f_wrap\" ${ (active_mode == 'radial-gradient') ? 'style=\"display: none;\"' : '' }>\n <img src=\" data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZJJREFUeNqsVetthDAMzp06QEagEv/LBk03oBswAhuQDVAn6AgZgTIBbAAb5DZIE+ScUs42OVRLVvBd7M+v2BeRRxVwEQSttei6LlNV/HB/ymDP8+LZYVxVlev73llrXUrLsqSipgBaz5YyvmcppfPRbRYDYJCNMSzId67xPSulXNu223c4KZDTAFgqMRDNKAXwGuokoAEazwMHBLW6gxTExQm6iqOGAoG66Ctc7BHl2fMHnBT1ECVK4zgKLgqbpIYjm1EX/eIFhSh/eb5lgLyC/jucf1I7z7NY1/Ue8t4LybwfDU1APeAabIZ6urIsg85DhyxM/tN7de5cuSK/rcz84uSnQKhU3Q7kNKUqDtNIJrMmEu4ORMvH6NDUtwhII85TBfXSYBtF54p/tBoGMI6mfCDm1bM0JU4+vD/FDMYc6pMUx11ksIuGAFrAA
JYCtctEk5PT6WBPTOCMTKKPDljg4j+AHABEw0PSQBMxC8n3cASSbtLibL8rZvOpxHtztBYuGWAFPK63xOPPzFWw0a8AAwA+dEfwP/CgZgAAAABJRU5ErkJggg==\" alt=\"angle\" title=\"${ options.labels[5] }\" />\n\n <input type=\"range\" name=\"deg\" value=\"${ gradient_data.deg }\" min=\"0\" max=\"360\" step=\"1\" />\n <input type=\"number\" name=\"deg-num\" value=\"${ gradient_data.deg }\" min=\"0\" max=\"360\" step=\"1\" />\n </div>\n <div class=\"pccp_circle_f_wrap\" ${ (active_mode == 'radial-gradient') ? '' : 'style=\"display: none;\"' }>\n <img src=\" data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAhQAAAIUB4uz/wQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAEZSURBVEiJzdQxSgRBFATQ52hionsKxcjQTERYUzMv4F28hImsiwcQExFEBfUCggtGXkBccRNR1qBnQHRme9p2wYJigu5f9Wd+zaceXexjgFeM8IADbGGmoS6KJVxiHOENVlLF1/HUQrziEBspnaeIV3zGchuD81+IV7wWmUk3Q7ziZpP4HHYib/eBU9yVYnWYnyQwmNDZI1YjDUTx0iD+Xo
p30BdSk5Kww7LWqOHSSdlAP0H4O3uEP7TucK80SOn8R4wLIWZ1eCufC03ftgUWCxxlCERR4Ay30zQYY1dI01QM4B7bwkCnYgAXWMPVXxo0LalNzArzaVoPWQZfkWVQxK/k4V8Y5MR32MbgOMOgVW1H2Iqp67qHzif097OAt54XXQAAAABJRU5ErkJggg==\" alt=\"shape\" title=\"${ options.labels[6] }\" />\n\n <span class=\"pcpp_ellipse_shape ${ (gradient_data.radial_circle) ? '' : 'pcpp_circle_btn_active' }\" data-val=\"ellipse\">Ellipse</span>\n <span class=\"pcpp_circle_shape ${ (gradient_data.radial_circle) ? 'pcpp_circle_btn_active' : '' }\" data-val=\"circle\">Circle</span>\n </div>\n <hr/>\n </div>`;\n }\n\n\n // HTML5 colorpicker\n picker += `\n <div class=\"pccp_color_f_wrap\" ${ (!print_grad_code) ? 'style=\"margin-top: 0;\"' : '' }>\n <img src=\" data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAA2wAAANsB8FDmnAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5
vuPBoAAAFzSURBVEiJrdU/SxxRFIbx3wgWCjbRSkEICCHBzhCwUCurQDr3I6QLaJEqTcDWJoVNPoAWqW2sXAJW22hhkX+F1VYKBlwQ15ti7+Cy2Z29M+OFt5i5nOdhztw5I4QgNXiFH/iYXFMCPoFThJhPTy340AcPeEDjSQRYxN8BQcAt3tQSYBInQ+B52pitI/haAM/zpZIAOwnwgDsslRLgLbqJgoBvyQIs46YEPM/qWAGm8asCPOB7imCvIjzPy5ECrOC+pmC3SJByJMflvEhwUQO8j0t0kP0nwDO9+VIFfh8Px0m8nh8mmKrR/zO9aXsTGVM5d0JcIYRObFGV1cQLzOAisojW/tWqAG/jM94PZQy85IZyrenqjZR1j2OlMfIURclRIvwP1jCH3/HeUcqXvIDrEdCfOMC2Xr/fxRaFWLOQOuw2+wrzHMe959iKonyvjc2y43oWhwOSqyFPdajgj5ZF2MiVZdkGNvA6Jj8pLTRDCM2i+n/jlZhJOn4yuAAAAABJRU5ErkJggg==\" alt=\"color\" title=\"${ options.labels[7] }\" />\n\n <div>\n <input type=\"color\" name=\"color\" value=\"${ shown_solid }\" style=\"opacity: ${ active_opacity };\" />\n </div>\n <input type=\"text\" name=\"hex\" value=\"${ shown_solid.toLowerCase() }\" />\n </div>`;\n\n // opacity cursor\n if(options.transparency) {\n picker += `\n <div class=\"pccp_opaci
ty_f_wrap\">\n <img src=\" data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAApgAAAKYB3X3/OAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAF9SURBVEiJtda/ihRBEMfxT42D4Jmdq5GHIBqJIHgYGCuIIhcYaGRgYGDsU4i+gqFgJogXivgGwkUmKpqcnhgJJ/4pg5mV3XVmd3q5K+iku+v37e7qrurITH0WEUdwC5dwCiexi21sZub9XufW6h7ho3iEmzg4M/wOm3i/SBxk5lTDDXxB9rRnHT7H8QYX/hubmXgHf+aI9wEO4CW+Yb0T0B7HIvFOQOu/glct5PwUAMfwdYB4L6DVOYzX+DTuGwf5IVYHBW2OZeb3iLiC9cn+EX4OXP3cHXS1qj37zuu6F1bjaqFP/8ucsIi4jtM1ThQCYuC8azhXYa0QUGTVfoqPAR/3E1DjA84U+AwKMl7gba3JjCU3aVCQM/M5zRE9xa8CQJFVmbmDJ3slGBGHIuLiv442SY3MrwFLJ7uqhezgriZdL7vyFU1gz2JjagcTK7iN36U7MKTgzJTMz4WANWxZVDInHEZ4jB8dgC08wL0h6ToWfFtWNd+Wy5b8tvwFZS60TLZpD/8AAAAASUVORK5CYII=\" alt=\"opacity\" title=\"${ options.labels[8] }\" />\n\n <input type=\"range\" name=\"opacity\" value=\"${ shown_opacity }\" min=\"0\" max=\"1\" step=\"0.01\" />\n <input type=\"number\" name=\"opacity-num\" value=\"${ shown_opacit
y }\" min=\"0\" max=\"1\" step=\"0.05\" />\n </div>`;\n }\n\n\n // append or re-fill\n (on_manual_input_change && document.getElementById(\"lc-color-picker\")) ? picker_el.innerHTML = picker : document.body.insertAdjacentHTML('beforeend', picker +'</div>');\n\n\n // modes change\n if(options.modes.length >= 1) {\n for (const mode of document.querySelectorAll('#lccp_modes_wrap span')) {\n mode.addEventListener(\"click\", (e) => { $this.mode_change( e.target, e.target.getAttribute('data-mode')) });\n }\n }\n\n // print steps and add gradient step action\n if(print_grad_code) {\n gradient_data.steps.some(function(step, index) {\n $this.add_draggable_element(index, step.position, step.color);\n });\n\n document.querySelector('.lccp_gradient:not(.lccp_gradient-bg)').addEventListener(\"click\", (e) =>
{this.add_gradient_step(e) });\n }\n\n // angle actions\n if(options.modes.indexOf('linear-gradient') !== -1) {\n document.querySelector('.pccp_deg_f_wrap input[type=range]').addEventListener(\"input\", (e) => {this.track_deg_range_change(e)});\n document.querySelector('.pccp_deg_f_wrap input[name=deg-num]').addEventListener(\"change\", (e) => {this.track_deg_num_change(e)});\n document.querySelector('.pccp_deg_f_wrap input[name=deg-num]').addEventListener(\"keyup\", (e) => {\n this.debounce('deg_f_change', 500, 'track_deg_num_change', e);\n });\n }\n\n // circle actions\n if(options.modes.indexOf('radial-gradient') !== -1) {\n for (const mode of document.querySelectorAll('.pccp_circle_f_wrap span')) {\n mode.addEventListener(\"click\", (e) => { $this.set_ellipse_circle( e.target, e.target.getAttribute('data-val')) });\n
}\n }\n\n // color actions\n document.querySelector('.pccp_color_f_wrap input[type=\"color\"]').addEventListener(\"input\", (e) => {this.track_color_change(e)});\n document.querySelector('.pccp_color_f_wrap input[type=\"color\"]').addEventListener(\"change\", (e) => {this.track_color_change(e)});\n document.querySelector('.pccp_color_f_wrap input[name=hex]').addEventListener(\"keyup\", (e) => {\n this.debounce('hex_f_change', 600, 'track_color_hex_change', e);\n });\n\n // transparency actions\n if(options.transparency) {\n document.querySelector('.pccp_opacity_f_wrap input[type=range]').addEventListener(\"input\", (e) => {this.track_opacity_range_change(e)});\n document.querySelector('.pccp_opacity_f_wrap input[name=opacity-num]').addEventListener(\"change\", (e) => {this.track_opacity_num_change(e)});\n document.querySelector('.pccp_opacity_f_wrap input[nam
e=opacity-num]').addEventListener(\"keyup\", (e) => {\n this.debounce('opacity_f_change', 500, 'track_opacity_num_change', e);\n });\n }\n };\n\n\n\n /*** add draggable element ***/\n this.add_draggable_element = function(rel_step_num, position, color) {\n const $this = this,\n container = document.querySelector('.lccp_gradient_ranges'),\n sel_class = (!rel_step_num) ? 'lccp_sel_step' : '',\n del_btn_vis = (gradient_data.steps.length > 2) ? '' : 'style=\"display: none;\"'\n\n container.innerHTML +=\n '<span class=\"lccp_gradient_range '+ sel_class +'\" data-step-num=\"'+ rel_step_num +'\" style=\"background: '+ color +'; left: '+ position +'%;\">'+\n '<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJFJREFUeNpiYMAOFIC4H4jPA/F/NHweKqfAQAQQgCr+TyTuJ2T
YeRIMQ3axADYD8RlWAMVEG9pAwBUwQJT3FYjwFjEGgrACE5BIYKAeyGcgMiKIdeF9RjQNuAAjkoEEAXpskgpQYp+JgcqA6l4GufACFR34AGTgRioauIHqCZsmWY8mhQNNii+qF7BUqQIAAgwANgu7Y7cw5VAAAAAASUVORK5CYII=\" '+ del_btn_vis +' />'+\n '</span>';\n\n let active = false;\n\n //////\n const dragStart = function(range_id, el, e) {\n active = range_id;\n };\n\n const dragEnd = function() {\n active = false;\n $this.apply_changes();\n };\n\n const drag = function(range_id, range, e) {\n if (active !== false && range_id == active) {\n e.preventDefault();\n const rect = container.getBoundingClientRect();\n\n let new_pos = (e.type === \"touchmove\") ? (e.touches[0].clientX - rect.left) : (e.clientX - rect.left);\n new_pos = Math.round((100 * new_pos) / container.offsetWidth);\n\n if(new_pos < 0) {new_pos = 0;}\n
else if(new_pos > 100) {new_pos = 100;}\n\n // limit positions basing on previous and next step\n const min_pos = (!range_id) ? 0 : gradient_data.steps[ range_id-1 ].position;\n const max_pos = (range_id == (gradient_data.steps.length - 1)) ? 100 : gradient_data.steps[ range_id+1 ].position;\n\n if(new_pos < min_pos) {new_pos = min_pos + 1;}\n else if(new_pos > max_pos) {new_pos = max_pos - 1;}\n\n gradient_data.steps[ range_id ].position = new_pos;\n range.style.left = new_pos +'%';\n\n $this.apply_gradient_changes();\n }\n };+\n /////\n\n document.querySelectorAll('.lccp_gradient_range').forEach(range => {\n const step_num = parseInt(range.getAttribute('data-step-num'), 10);\n\n range.removeEventListener(\"touchstart\", null);\n range.removeEvent
Listener(\"touchend\", null);\n range.removeEventListener(\"touchmove\", null);\n range.removeEventListener(\"click\", null);\n\n range.removeEventListener(\"mousedown\", null);\n range.removeEventListener(\"mouseup\", null);\n\n range.addEventListener(\"touchstart\", (e) => {dragStart(step_num, e.target, e)});\n range.addEventListener(\"mousedown\", (e) => {dragStart(step_num, e.target, e)});\n\n range.addEventListener(\"click\", (e) => {$this.select_gradient_color(step_num)});\n\n container.addEventListener(\"touchmove\", (e) => {drag(step_num, range, e)});\n container.addEventListener(\"mousemove\", (e) => {drag(step_num, range, e)});\n\n range.addEventListener(\"mouseup\", (e) => {dragEnd()});\n range.addEventListener(\"touchend\", (e) => {dragEnd()});\n document.addEventListener(\"mouseup\", (e) => {dragEnd()});\n }
);\n\n\n // remove step handler\n document.querySelectorAll('.lccp_gradient_range img').forEach((btn) => {\n\n btn.addEventListener(\"click\", (e) => {\n if(document.querySelectorAll('.lccp_gradient_range').length < 3) {\n return false;\n }\n\n // wait a bit to not interfere with global handler for picker closing\n setTimeout(() => {\n const parent = e.target.parentNode,\n step_num = parseInt(parent.getAttribute('data-step-num'), 10),\n to_select = (!step_num) ? 0 : step_num - 1;\n\n gradient_data.steps.splice(step_num, 1);\n\n // clean and restart\n document.querySelectorAll('.lccp_gradient_range').forEach(r => r.remove());\n\n gradient_data.steps.some(function(step, index) {\n
$this.add_draggable_element(index, step.position, step.color);\n });\n\n // select newly added element\n document.querySelector('.lccp_gradient_range[data-step-num=\"'+ to_select +'\"]').click();\n\n this.apply_gradient_changes(true);\n }, 20);\n });\n });\n };\n\n\n\n /* select gradient color */\n this.select_gradient_color = function(step_num) {\n sel_grad_step = step_num;\n\n document.querySelectorAll('.lccp_gradient_range').forEach(m => m.classList.remove('lccp_sel_step'));\n document.querySelector('.lccp_gradient_range[data-step-num=\"'+ step_num +'\"]').classList.add('lccp_sel_step');\n\n active_solid = gradient_data.steps[ step_num ].color;\n active_opacity = gradient_data.steps[ step_num ].opacity;\n\n document.querySelector('#lc-color-picker input[type=\"color\"]').value = acti
ve_solid;\n document.querySelector('.pccp_color_f_wrap input[name=hex]').value = active_solid;\n\n if(options.transparency) {\n document.querySelector('.pccp_opacity_f_wrap input[type=range]').value = active_opacity;\n document.querySelector('.pccp_opacity_f_wrap input[name=opacity-num]').value = active_opacity;\n }\n };\n\n\n\n /* apply changes to gradient, after a color/opacity/degree update */\n this.apply_gradient_changes = function(also_apply_changes) {\n const $this = this;\n\n let new_gradient = active_mode+'(';\n new_gradient += (active_mode == 'linear-gradient') ? gradient_data.deg+'deg' : (gradient_data.radial_circle) ? 'circle' : 'ellipse';\n new_gradient += ', ';\n\n let colors_part = []\n gradient_data.steps.some(function(step, index) {\n\n let to_add = (options.transparency) ? $this.hex_to_RGBA(step.color, step.opacity) : $this.shor
ten_hex(step.color);\n\n if(\n gradient_data.steps.length > 2 ||\n (\n gradient_data.steps.length <= 2 &&\n (\n (!index && parseInt(step.position, 10)) ||\n (index && index < (gradient_data.steps.length - 1)) ||\n (index == (gradient_data.steps.length - 1) && parseInt(step.position, 10) != 100)\n )\n )\n ) {\n to_add += ' '+ step.position +'%';\n }\n\n colors_part.push( to_add );\n });\n\n active_gradient = new_gradient + colors_part.join(', ') + ')';\n\n if(document.querySelector('.lccp_gradient:not(.lccp_gradient-bg)')) {\n document.querySelector('.lccp_gradient:not(.lccp_gradient-bg)').style.background = active_gradient;\n }\n\n if(also_apply_chang
es) {\n this.apply_changes();\n }\n };\n\n\n\n /* apply changes to target field */\n this.apply_changes = function() {\n if(!active_trigger) {\n return false;\n }\n let val = '';\n\n // apply everything to picker global vars\n if(active_mode == 'solid') {\n val = this.shorten_hex(active_solid);\n\n if(options.transparency && document.querySelector('.pccp_opacity_f_wrap input[type=range]')) {\n active_opacity = document.querySelector('.pccp_opacity_f_wrap input[type=range]').value;\n val = this.hex_to_RGBA(val, active_opacity);\n }\n }\n else {\n val = active_gradient;\n }\n\n // apply\n active_trigger.style.background = val;\n\n const field = active_trigger.parentNode.querySelector(right_input_selector),\n old_val =
field.value;\n\n if(old_val != val) {\n field.value = val;\n last_tracked_col = val;\n\n if(typeof(options.on_change) == 'function') {\n\n if(typeof(debounced_vars['on_change_cb']) != undefined && debounced_vars['on_change_cb']) {\n clearTimeout(debounced_vars['on_change_cb']);\n }\n debounced_vars['on_change_cb'] = setTimeout(() => {\n options.on_change.call(this, val, field);\n }, 300);\n }\n }\n };\n\n\n\n\n\n\n // HANDLERS\n\n // fields toggle basing on modes change\n this.mode_change = function(el, new_mode) {\n if(active_mode == new_mode) {\n return false;\n }\n let color, opacity;\n\n // from gradient to solid\n if(new_mode == 'solid') {\n color = active_solid;\n if(options.
transparency) {\n opacity = active_opacity;\n }\n }\n else {\n color = gradient_data.steps[0].color;\n if(options.transparency) {\n opacity = gradient_data.steps[0].opacity;\n }\n }\n\n document.querySelector('#lc-color-picker input[type=\"color\"]').value = color;\n document.querySelector('.pccp_color_f_wrap input[name=hex]').value = color;\n\n if(options.transparency) {\n document.querySelector('.pccp_opacity_f_wrap input[type=range]').value = opacity;\n document.querySelector('.pccp_opacity_f_wrap input[name=opacity-num]').value = opacity;\n }\n\n // toggle grad fields\n if(options.modes.length >= 1) {\n document.querySelector('.pccp_deg_f_wrap').style.display = (new_mode == 'linear-gradient') ? 'flex' : 'none';\n document.querySelector('.pccp_circle_f_
wrap').style.display = (new_mode == 'radial-gradient') ? 'block' : 'none';\n }\n\n // toogle gradient wizard\n if(options.modes.indexOf('linear-gradient') !== -1 || options.modes.indexOf('radial-gradient') !== -1) {\n document.querySelector('.lccp_gradient_wizard').style.display = (new_mode != 'solid') ? 'block' : 'none';\n }\n\n document.querySelectorAll('#lccp_modes_wrap span').forEach(m => m.classList.remove('lccp_sel_mode'));\n el.classList.add('lccp_sel_mode');\n\n active_mode = new_mode;\n (new_mode == 'solid') ? this.apply_changes() : this.apply_gradient_changes(true);\n };\n\n\n // add gradient step\n this.add_gradient_step = function(e) {\n const $this = this,\n pos = Math.round((100 * e.layerX) / e.target.offsetWidth);\n\n // inject in actual steps\n let index = 0;\n for(let step of gradient_data.steps) {\n\n
if(step.position > pos) {\n const step_data = {\n color : (index - 1 < 0) ? step.color : gradient_data.steps[(index - 1)].color,\n opacity : 1,\n position : pos\n }\n\n gradient_data.steps.splice(index, 0, step_data);\n break;\n }\n\n index++;\n }\n document.querySelectorAll('.lccp_gradient_range').forEach(r => r.remove());\n\n gradient_data.steps.some(function(step, index) {\n $this.add_draggable_element(index, step.position, step.color);\n });\n\n // select newly added element\n document.querySelector('.lccp_gradient_range[data-step-num=\"'+ index +'\"]').click();\n\n this.apply_gradient_changes(true);\n };\n\n\n // apply ellipse or circle\n this.set_ellipse_circle = function(el, new_opt) {\n
if(gradient_data.radial_circle && new_opt == 'circle' || !gradient_data.radial_circle && new_opt != 'circle') {\n return false;\n }\n gradient_data.radial_circle = !gradient_data.radial_circle;\n\n document.querySelectorAll('.pccp_circle_f_wrap span').forEach(m => m.classList.remove('pcpp_circle_btn_active'));\n el.classList.add('pcpp_circle_btn_active');\n\n this.apply_gradient_changes(true);\n };\n\n\n // track opacity range fields change\n this.track_deg_range_change = function(e) {\n document.querySelector('.pccp_deg_f_wrap input[name=deg-num]').value = e.target.value;\n\n gradient_data.deg = e.target.value;\n this.apply_gradient_changes(true);\n };\n this.track_deg_num_change = function(e) {\n let val = parseFloat(e.target.value);\n if(isNaN(val) || val < 0 || val > 360) {\n val = 90;\n }\n\n e.target.val
ue = val;\n if(document.querySelector('.pccp_deg_f_wrap input[type=range]')) {\n document.querySelector('.pccp_deg_f_wrap input[type=range]').value = val;\n }\n\n gradient_data.deg = val;\n this.apply_gradient_changes(true);\n };\n\n\n // track opacity range fields change\n this.track_color_change = function(e) {\n const val = e.target.value.toLowerCase();\n document.querySelector('.pccp_color_f_wrap input[name=hex]').value = val;\n\n this.apply_color_change(val);\n };\n this.track_color_hex_change = function(e) {\n let val = this.short_hex_fix(e.target.value);\n\n if(val.match(/^#[a-f0-9]{6}$/i) === null) {\n val = active_solid.toLowerCase();\n }\n\n e.target.value = val;\n document.querySelector('#lc-color-picker input[type=\"color\"]').value = val;\n\n this.apply_color_change(val);\n };\n
this.apply_color_change = function(val) {\n if(active_mode == 'solid') {\n active_solid = val;\n this.apply_changes();\n }\n else {\n gradient_data.steps[ sel_grad_step ].color = val;\n\n document.querySelector('.lccp_sel_step').style.background = val;\n this.apply_gradient_changes(true);\n }\n };\n\n\n // track opacity range fields change\n this.track_opacity_range_change = function(e) {\n document.querySelector('.pccp_opacity_f_wrap input[name=opacity-num]').value = e.target.value;\n this.alter_hex_opacity(e.target.value);\n };\n this.track_opacity_num_change = function(e) {\n let val = parseFloat(e.target.value);\n if(isNaN(val) || val < 0 || val > 1) {\n val = 0.5;\n }\n\n e.target.value = val;\n\n if(document.querySelector('.pccp_opacity_f_wrap input[type=rang
e]')) {\n document.querySelector('.pccp_opacity_f_wrap input[type=range]').value = val;\n this.alter_hex_opacity(val);\n }\n };\n this.alter_hex_opacity = function(opacity) {\n document.querySelector('#lc-color-picker input[type=\"color\"]').style.opacity = opacity;\n\n if(active_mode == 'solid') {\n active_opacity = opacity;\n this.apply_changes();\n }\n else {\n gradient_data.steps[ sel_grad_step ].opacity = opacity;\n this.apply_gradient_changes(true);\n }\n };\n\n\n\n\n\n /*\n * UTILITY FUNCTION - debounce action to run once after X time\n *\n * @param (string) action_name\n * @param (int) timing - milliseconds to debounce\n * @param (string) - class method name to call after debouncing\n * @param (mixed) - extra parameters to pass to callback function\n */\n th
is.debounce = function(action_name, timing, cb_function, cb_params) {\n if( typeof(debounced_vars[ action_name ]) != 'undefined' && debounced_vars[ action_name ]) {\n clearTimeout(debounced_vars[ action_name ]);\n }\n const $this = this;\n\n debounced_vars[ action_name ] = setTimeout(() => {\n $this[cb_function].call($this, cb_params);\n }, timing);\n };\n\n\n\n\n\n /* CSS - creates inline CSS into the page */\n this.generate_style = function() {\n const transp_bg_img = \"url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAQDAwMDAwQDAwQGBAMEBgcFBAQFBwgGBgcGBggKCAkJCQkICgoMDAwMDAoMDA0NDAwRERERERQUFBQUFBQUFBT/2wBDAQQFBQgHCA8KCg8UDg4OFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAoACgDAREAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAUGCP/EACIQAQAABQMFAQAAAAAAAAAAAAAFFUNjgqLB4RESEzVRkf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwDv4AE6K
0stgTgAaIAE6K0stgTgAUZra1cATW1q4A9na8WXXu/PgEqu6eQJVd08gnAAowqrjuCiADOgAowqrjuCiAD/2Q==')\";\n\n document.head.insertAdjacentHTML('beforeend',\n`<style>\n.lccp-el-wrap {\n position: relative;\n display: inline-block;\n}\n.lccp-el-wrap > input {\n margin: 0;\n min-width: 100%;\n max-width: 100%;\n width: auto;\n}\n.lccp-preview,\n.lccp-preview-bg {\n display: inline-block;\n position: absolute;\n cursor: pointer;\n z-index: 15;\n}\n.lccp-preview-bg {\n z-index: 10;\n}\n.lccp-preview-right .lccp-preview {\n border-left: 1px solid #ccc;\n}\n.lccp-preview-left .lccp-preview {\n border-right: 1px solid #ccc;\n}\n.lccp-direct-cp-f {\n padding: 0 !important;\n margin: 0 !important;\n width: 0 !important;\n height: 0 !important;\n position: absolute;\n bottom: 0;\n visibility: hidden;\n}\n.lccp-preview-right .lccp-direct-cp-f {\n right: 0;\n}\n.lccp-preview-left .lccp-direct-cp-f{\n left: 0;\n}\n#lc-color-picker,\n#lc-color-picker * {\n
box-sizing: border-box;\n font-family: sans-serif;\n}\n#lc-color-picker {\n visibility: hidden;\n z-index: -100;\n opacity: 0;\n position: absolute;\n top: -9999px;\n z-index: 9999999999;\n width: 280px;\n background: #fff;\n box-shadow: 0px 2px 13px -2px rgba(0, 0, 0, .18);\n border-radius: 4px;\n overflow: hidden;\n padding: 10px;\n border: 1px solid #ccc;\n transition: opacity .15s ease;\n}\n#lc-color-picker.lccp-shown {\n visibility: visible;\n opacity: 1;\n\n}\n\n#lccp_modes_wrap {\n\tdisplay: flex;\n\tflex-direction: row;\n\tjustify-content: space-between;\n margin-bottom: 10px;\n}\n#lccp_modes_wrap span,\n.pccp_circle_f_wrap span {\n\tdisplay: inline-block;\n\tborder: 1px solid #e8e8e8;\n\tbackground: #e8e8e8;\n opacity: .78;\n\tpadding: 4px 7px;\n\tfont-size: 11.5px;\n\tborder-radius: 3px;\n\tline-height: normal;\n cursor: pointer;\n user-select: none;\n transition: all .2s ease;\n}\n#lccp_modes_wrap span.lccp_sel_mode,\n.pccp_circle_f
_wrap span.pcpp_circle_btn_active {\n\tborder: 1px solid #bbb;\n\tbackground: #fff;\n opacity: 1;\n\tcursor: default;\n}\n.lccp_gradient_wizard,\n.lccp_gradient_ranges {\n position: relative;\n}\n.lccp_gradient {\n height: 35px;\n border: 1px solid #aaa;\n cursor: crosshair;\n position: relative;\n z-index: 10;\n user-select: none;\n}\n.lccp_gradient-bg {\n\tposition: absolute;\n\ttop: 0;\n\tz-index: 0;\n\twidth: 100%;\n\tmargin: 0;\n}\n.lccp_gradient_ranges {\n margin: 2px 7px 25px 8px;\n height: 20px;\n}\n.lccp_gradient_range {\n\tdisplay: inline-block;\n\twidth: 13px;\n\theight: 13px;\n\tborder: 1px solid #ccc;\n\tborder-radius: 0 50% 50% 50%;\n\ttransform: rotate(45deg) translate3d(-5px, 5px, 0);\n\tcursor: col-resize;\n\tposition: absolute;\n top: 3px;\n}\n.lccp_gradient_range img {\n\twidth: 13px;\n\tposition: relative;\n\ttop: 11px;\n\tleft: 11px;\n\topacity: .3;\n\tcursor: pointer;\n transition: all .2s ease;\n}\n.lccp_gradient_range img:hover {\n opacity: .5;\n
}\n.lccp_sel_step {\n border: 1px solid #333;\n box-shadow: 0 0 2px 1px teal;\n}\n.pccp_deg_f_wrap,\n.pccp_circle_f_wrap {\n margin-bottom: 10px;\n}\n.pccp_circle_f_wrap * {\n float: left;\n}\n.pccp_circle_f_wrap:after {\n content: \"\";\n clear: both;\n display: block;\n}\n.pccp_circle_f_wrap img {\n position: relative;\n top: 4px;\n}\n.pccp_circle_f_wrap span {\n margin-left: 13px;\n}\n.pccp_circle_f_wrap span:not(.pcpp_circle_btn_active) {\n cursr: pointer;\n}\n.pccp_deg_f_wrap,\n.pccp_color_f_wrap,\n.pccp_opacity_f_wrap {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n clear: both;\n}\n.pccp_deg_f_wrap input,\n.pccp_color_f_wrap input,\n.pccp_opacity_f_wrap input {\n border: 1px solid #aaa;\n border-radius: 3px;\n padding: 0;\n}\n.lccp-preview-bg,\n.pccp_color_f_wrap div,\n.lccp_gradient-bg {\n background: ${ transp_bg_img } repeat;\n background-size: 15px;\n}\n#lc-color-picker hr {\n\tmargin
: 14px 0 0;\n\theight: 0;\n\tborder-width: 1px 0;\n\tborder-style: dashed;\n\tborder-color: #e3e3e3;\n}\n.pccp_color_f_wrap div {\n width: calc(100% - 25px - 85px);\n height: 25px;\n border: 1px solid #aaa;\n border-radius: 2px;\n overflow: hidden;\n}\n.pccp_deg_f_wrap img,\n.pccp_circle_f_wrap img,\n.pccp_color_f_wrap img,\n.pccp_opacity_f_wrap img {\n\tmax-width: 15px;\n\topacity: .6;\n cursor: help;\n user-select: none;\n}\n.pccp_color_f_wrap input[type=color] {\n -webkit-appearance: none;\n padding: 0;\n width: 110%;\n height: 110%;\n transform: translate(-5%, -5%);\n cursor: pointer;\n border: none;\n}\n.pccp_color_f_wrap input:focus {\n outline: none;\n}\n.pccp_color_f_wrap input::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n.pccp_color_f_wrap input::-webkit-color-swatch {\n border: none;\n}\n.pccp_color_f_wrap input[name=hex] {\n width: 70px;\n height: 25px;\n text-align: center;\n}\n.pccp_color_f_wrap {\n margin-top: 17px;\n}\n.pccp_o
pacity_f_wrap {\n margin-top: 10px;\n}\n.pccp_deg_f_wrap input[type=range],\n.pccp_opacity_f_wrap input[type=range] {\n width: calc(100% - 25px - 70px);\n height: 25px;\n}\n.pccp_deg_f_wrap input[type=\"number\"],\n.pccp_opacity_f_wrap input[type=\"number\"] {\n\twidth: 53px;\n\theight: 25px;\n\ttext-align: center;\n}\n.pccp_deg_f_wrap input[type=range],\n.pccp_opacity_f_wrap input[type=range] {\n -webkit-appearance: none;\n height: 5px;\n background: #d5d5d5;\n outline: none;\n border: none;\n}\n.pccp_deg_f_wrap input::-webkit-slider-thumb,\n.pccp_opacity_f_wrap input::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 17px;\n height: 17px;\n background: #888;\n cursor: pointer;\n border-radius: 50%;\n border: 1px solid #aaa;\n box-shadow: 0 0 0 5px #fff inset, 0 0 2px rgba(0,0,0,.15);\n}\n.pccp_deg_f_wrap input::-moz-range-thumb,\n.pccp_opacity_f_wrap input::-moz-range-thumb {\n width: 15px;\n height: 15px;\n backgroun
d: #888;\n cursor: pointer;\n border-radius: 50%;\n border: 1px solid #aaa;\n box-shadow: 0 0 0 5px #fff inset, 0 0 2px rgba(0,0,0,.15);\n}\n\n#lc-color-picker.lccp_dark_theme {\n background: #333;\n border-color: #505050;\n}\n.lccp_dark_theme img {\n\tfilter: invert(100%);\n opacity: .85;\n}\n.lccp_dark_theme .lccp_gradient_range img {\n\topacity: .6;\n}\n.lccp_dark_theme .lccp_gradient_range img:hover {\n opacity: .8;\n}\n.lccp_dark_theme .lccp_gradient {\n border-color: #626262;\n}\n.lccp_dark_theme .lccp_sel_step {\n\tbox-shadow: 0 0 2px 1px orange;\n}\n#lc-color-picker.lccp_dark_theme hr {\n\tborder-color: #727272;\n}\n.lccp_dark_theme .pccp_deg_f_wrap input,\n.lccp_dark_theme .pccp_color_f_wrap input,\n.lccp_dark_theme .pccp_opacity_f_wrap input {\n\tborder-color: #777;\n\tbackground: #505050;\n\tcolor: #f3f3f3;\n}\n.lccp_dark_theme input[type=range] {\n background: #808080;\n}\n</style>`);\n };\n\n\n // init when called\n this.init();\n };\n\n\n\n\
n\n\n // UTILITIES\n\n // sanitize \"selector\" parameter allowing both strings and DOM objects\n const maybe_querySelectorAll = (selector) => {\n\n if(typeof(selector) != 'string') {\n if(selector instanceof Element) { // JS or jQuery\n return [selector];\n }\n else {\n let to_return = [];\n\n for(const obj of selector) {\n if(obj instanceof Element) {\n to_return.push(obj);\n }\n }\n return to_return;\n }\n }\n\n // clean problematic selectors\n (selector.match(/(#[0-9][^\\s:,]*)/g) || []).forEach(function(n) {\n selector = selector.replace(n, '[id=\"' + n.replace(\"#\", \"\") + '\"]');\n });\n\n return document.querySelectorAll(selector);\n };\n\n\n})());\n"],"names":["global","factory","this","window","lc_color_picker","debounced_vars","window_width","style_genera
ted","active_trigger","active_trig_id","active_solid","active_opacity","active_gradient","active_mode","sel_grad_step","gradient_data","deg","radial_circle","steps","def_opts","modes","open_on_focus","transparency","dark_theme","no_input_mode","wrap_width","preview_style","input_padding","side","width","separator_color","fallback_colors","on_change","labels","right_input_selector","lccp_ivc_event","picker_id","hide_picker","CustomEvent","bubbles","detail","document","addEventListener","e","picker","querySelector","target","classList","contains","trigger","getElementsByClassName","parentNode","getElementById","getAttribute","dispatchEvent","innerWidth","String","prototype","lccpReplaceArray","find","replace","replaceString","i","length","regex","RegExp","attachTo","cp_uniqid","last_tracked_col","options","console","error","bkp_opts","Object","assign","init","$this","generate_style","maybe_querySelectorAll","forEach","el","tagName","wrap_element","Math","random","toString","substr","side_prop","trigger_css","p
arseInt","getComputedStyle","trigger_upper_css","value","div","createElement","className","setAttribute","style","round","getBoundingClientRect","direct_colorpicker_code","add","innerHTML","insertBefore","appendChild","paddingRight","paddingLeft","background","show_picker","remove","debounce","keyCode","key","is_active_trigger_and_opened","activeElement","curr_val","test","val_to_set","browser_val","trim","replaceAll","rgb","RGB_to_hex","toLowerCase","indexOf","call","$target","direct_colorpicker","navigator","userAgent","includes","click","val_to_picker","append_color_picker","picker_w","offsetWidth","picker_h","offsetHeight","at_offsety","at_h","clientHeight","y_pos","y","pageYOffset","left","right","floor","y_pos_css","documentElement","scrollTop","innerHeight","from_manual_input","val","load_gradient_data","load_solid_data","raw_data","data","RGBA_to_hexA","short_hex_fix","is_radial","raw_steps","split","fallback_multiplier","some","raw_step","index","position","raw_color","opacity","col_arr","push","col
or","rgba_arr","alpha","substring","splice","join","parseFloat","rgb_arr","r","g","b","shorten_hex","hex","a","hex_to_RGB","h","hex_to_RGBA","on_manual_input_change","theme_class","shown_solid","shown_opacity","print_grad_code","picker_el","body","insertAdjacentHTML","mode","querySelectorAll","mode_change","step","add_draggable_element","add_gradient_step","track_deg_range_change","track_deg_num_change","set_ellipse_circle","track_color_change","track_opacity_range_change","track_opacity_num_change","rel_step_num","container","sel_class","del_btn_vis","active","dragStart","range_id","dragEnd","apply_changes","drag","range","preventDefault","rect","new_pos","type","touches","clientX","min_pos","max_pos","apply_gradient_changes","step_num","removeEventListener","select_gradient_color","btn","setTimeout","parent","to_select","m","also_apply_changes","new_gradient","colors_part","to_add","field","undefined","clearTimeout","new_mode","display","pos","layerX","step_data","new_opt","isNaN","apply_color_change","tra
ck_color_hex_change","match","alter_hex_opacity","action_name","timing","cb_function","cb_params","head","selector","Element","to_return","obj","n","exports","module","define","amd","globalThis","self","Chart"],"mappings":"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"}