JSFiddle - React, Tailwind, and code Playground
by Aashish Handa
HTML
<script src="https://www.dropbox.com/scl/fi/sq6agqln4ohe8ca9u18m0/icons.json"></script>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Button Generator</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.css" />
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/select2.min.css" rel="stylesheet" />
<!-- <link rel="stylesheet" type="text/css" href="assets/coloris.css"> -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Amita:wght@700&family=Lobster&family=Poppins:wght@500&family=Roboto:wght@300;400;500&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" />
<style>
/* Button */
/*.gxcpl-button {
font-family: 'Roboto', sans-serif;
font-weight: 500;
font-size: 14px;
letter-spacing: 1.25px;
text-transform: uppercase;
}*/
/* Select2 */
.select2-selection--single,
#select2-icon-container {
height: 58px !important;
border-color: #dee2e6 !important;
}
.select2-container--default .select2-selection--single .select2-selection__rendered {
line-height: 70px;
margin-left: 5px;
}
.select2-selection__arrow {
top: 15px !important;
}
/* Color Picker */
.square .clr-field button {
width: 22px;
height: 22px;
left: 5px;
right: auto;
border-radius: 5px;
}
.square .clr-field input {
padding-left: 36px;
}
</style>
...
CSS
/* coloris.css */
.clr-picker {
display: none;
flex-wrap: wrap;
position: absolute;
width: 200px;
z-index: 1000;
border-radius: 10px;
background-color: #fff;
justify-content: flex-end;
direction: ltr;
box-shadow: 0 0 5px rgba(0,0,0,.05), 0 5px 20px rgba(0,0,0,.1);
-moz-user-select: none;
-webkit-user-select: none;
user-select: none;
}
.clr-picker.clr-open,
.clr-picker[data-inline="true"] {
display: flex;
}
.clr-picker[data-inline="true"] {
position: relative;
}
.clr-gradient {
position: relative;
width: 100%;
height: 100px;
margin-bottom: 15px;
border-radius: 3px 3px 0 0;
background-image: linear-gradient(rgba(0,0,0,0), #000), linear-gradient(90deg, #fff, currentColor);
cursor: pointer;
}
.clr-marker {
position: absolute;
width: 12px;
height: 12px;
margin: -6px 0 0 -6px;
border: 1px solid #fff;
border-radius: 50%;
background-color: currentColor;
cursor: pointer;
}
.clr-picker input[type="range"]::-webkit-slider-runnable-track {
width: 100%;
height: 16px;
}
.clr-picker input[type="range"]::-webkit-slider-thumb {
width: 16px;
height: 16px;
-webkit-appearance: none;
}
.clr-picker input[type="range"]::-moz-range-track {
width: 100%;
height: 16px;
border: 0;
}
.clr-picker input[type="range"]::-moz-range-thumb {
width: 16px;
height: 16px;
border: 0;
}
.clr-hue {
background-image: linear-gradient(to right, #f00 0%, #ff0 16.66%, #0f0 33.33%, #0ff 50%, #00f 66.66%, #f0f 83.33%, #f00 100%);
}
.clr-hue,
.clr-alpha {
position: relative;
width: calc(100% - 40px);
height: 8px;
margin: 5px 20px;
border-radius: 4px;
}
.clr-alpha span {
display: block;
height: 100%;
width: 100%;
border-radius: inherit;
background-image: linear-gradient(90deg, rgba(0,0,0,0), currentColor);
}
.clr-hue input,
.clr-alpha input {
position: absolute;
width: calc(100% + 32px);
...
JavaScript
/* coloris.js */
/*!
* Copyright (c) 2021 Momo Bassit.
* Licensed under the MIT License (MIT)
* https://github.com/mdbassit/Coloris
*/
(function (window, document, Math, undefined) {
var ctx = document.createElement('canvas').getContext('2d');
var currentColor = { r: 0, g: 0, b: 0, h: 0, s: 0, v: 0, a: 1 };
var container,picker,colorArea,colorMarker,colorPreview,colorValue,clearButton,closeButton,
hueSlider,hueMarker,alphaSlider,alphaMarker,currentEl,currentFormat,oldColor,keyboardNav,
colorAreaDims = {};
// Default settings
var settings = {
el: '[data-coloris]',
parent: 'body',
theme: 'default',
themeMode: 'light',
rtl: false,
wrap: true,
margin: 2,
format: 'hex',
formatToggle: false,
swatches: [],
swatchesOnly: false,
alpha: true,
forceAlpha: false,
focusInput: true,
selectInput: false,
inline: false,
defaultColor: '#000000',
clearButton: false,
clearLabel: 'Clear',
closeButton: false,
closeLabel: 'Close',
onChange: function onChange() {return undefined;},
a11y: {
open: 'Open color picker',
close: 'Close color picker',
clear: 'Clear the selected color',
marker: 'Saturation: {s}. Brightness: {v}.',
hueSlider: 'Hue slider',
alphaSlider: 'Opacity slider',
input: 'Color value field',
format: 'Color format',
swatch: 'Color swatch',
instruction: 'Saturation and brightness selector. Use up, down, left and right arrow keys to select.' } };
// Virtual instances cache
var instances = {};
var currentInstanceId = '';
var defaultInstance = {};
var hasInstance = false;
/**
* Configure the color picker.
* @param {object} options Configuration options.
*/
function configure(options) {
if (typeof options !== 'object') {
return;
}
for (var key in options) {
switch (key) {
case 'el':
bindFields(options.el);
if (options.wrap !==...