JSFiddle - React, Tailwind, and code Playground

by joshmoto

HTML

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<script src="https://dev.joshmoto.wtf/iris/dist/iris.min.js"></script>
<!-- Gravity forms html mark up below -->

<div class="container pt-3">
  <form id="form">
    <div class="form-row">
      <div class="form-group col-6 iris-wrapper">
        <div class="input-group">
          <div class="input-group-prepend">
            <span class="input-group-text" style="background-color:#00e4bc"></span>
          </div>
          <input type="text" id="color_picker" class="form-control form-control-lg" value="#00e4bc" />
        </div>
      </div>
      <div class="form-group col-6 iris-wrapper">
        <div class="input-group">
          <div class="input-group-prepend">
            <span class="input-group-text" style="background-color:#0084ff"></span>
          </div>
          <input type="text" id="color_picker" class="form-control form-control-lg" value="#0084ff" />
        </div>
      </div>
    </div>
  </form>
</div>

SCSS

.input-group-prepend {
  .input-group-text {
    &::before {
      width: 18px;
      content: "";
      display: block;
      height: 1px;
    }
  }
}

.iris-picker {
  position: absolute;
  margin-top: 5px;
}

JavaScript

// loop the iris wrappers
$('.iris-wrapper','#form').each(function() {

  // set up current object vars
  var $input 					= $('INPUT', this);
  var $inputGroup 		= $('.input-group', this);
  var $inputIndicator = $('.input-group-text', this);

  // set our input color indicator to default color
  $inputIndicator.css('background-color', $input.val());

  // init iris
  $input.iris({
    // on iris change
    change: function(event, ui) {
      // update input value on change
      $input.attr('value', ui.color.toString());
      // load the current value
      $inputIndicator.css('background-color', ui.color.toString());
    }
  });

  // move iris color picker after the input group
  $irisPicker = $('.iris-picker', this).insertAfter($inputGroup);

  // input blur function
  $input.blur(function() {
    setTimeout(function() {
      if (!$(document.activeElement).closest(".iris-picker").length)
        $input.iris('hide');
      else
        $input.focus();
    }, 0);
  });

  // when input is focused
  $input.focus(function() {
    // input iris show
    $input.iris('show');
  });

});