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 !==...