JSFiddle - React, Tailwind, and code Playground

by Imri Paloja

HTML

<link
  rel="stylesheet"
  href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css"
/>
<link
  rel="stylesheet"
  href="https://cdnjs.cloudflare.com/ajax/libs/skeleton/2.0.4/skeleton.min.css"
/>
<link
  rel="stylesheet"
  href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/7.0.1/css/all.min.css"
/>

<link
  href="https://cdn.jsdelivr.net/npm/[email protected]/dist/quill.snow.css"
  rel="stylesheet"
/>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/quill.js"></script>

<div class="container">
    <div id="toolbar">

        <div class="first-row container">

            <div class="separator">
                <select title="header" class="ql-header"></select>

                <select title="font" class="ql-font"></select>
                <select title="size" class="ql-size"></select>
            </div>

            <div class="separator">
                <button type="submit" title="Save">
                    <i class="fa-solid fa-floppy-disk"></i>
                </button>
            </div>

            <div class="separator">
                <button title="bold" class="ql-bold"></button>
                <button title="italic" class="ql-italic"></button>
                <button title="underline" class="ql-underline"></button>
                <button title="strike" class="ql-strike"></button>
            </div>
            <div class="separator">

                    <span title="formats" class="ql-formats">
                        <button title="script: sub" class="ql-script" value="sub"></button>
                        <button title="script: super" class="ql-script" value="super"></button>
                    </span>
            </div>

            <div class="separator">
                <select title="Text color" class="ql-color"></select>
                <select title="background color" class="ql-background"></select>
            </div>

            <div...

CSS

html,
body {
  color: #454545;
}

.container {
  margin-top: 5%;
}
.separator {
  border-right: 1px solid #cccccc;
  margin-right: 1%;
  padding-right: 1%;
  float: left;
}

p {
  margin: 2px 3px !important;
  padding: 10px 5px !important;
}

div#editor {
  background: #eeeeee;
  border-left: 1px solid #cccccc;
  border-right: 1px solid #cccccc;
  border-bottom: 1px solid #cccccc;
  border-radius: 0 0 5px 5px;
  padding: 20px 30px;
  width: 100%;
}

div#toolbar button[type='submit'] {
  text-align: center;
  padding: 0 0 0 30% !important;
}

/*svg-inline--fa fa-up-down-left-right*/
div#toolbar button[type='submit'] .svg-inline--fa,
div#toolbar button[onclick='toggleFullscreen()'] .svg-inline--fa {
  width: 12px !important;
  height: 12px !important;
}

.second-row.container {
  margin-left: 25px !important;
}

.first-row.container,
.second-row.container {
  margin: 10px auto;
  clear: both;
}
*/ .sticky {
  position: -webkit-sticky;
  position: sticky;
  top: -1px;
}
#TopNavMenuResponsive {
  display: none;
}
nav.NavMenu {
  z-index: 100;
}
nav.NavMenu ul {
  list-style-type: none;
  margin: 0px 0px 0px 0px;
  padding: 0px 0px 0px 10px;
}
nav.NavMenu ul li {
  display: inline-block;
  font-size: 15px !important;
  color: #ffffff;
  padding: 10px 10px;
  margin: 0px 0px 0px 0px;
  text-transform: capitalize;
}
nav.NavMenu ul li ul {
  display: none;
  color: #ffffff;
  margin: 15px 0px 0px -65px;
  background: #20272b;
  width: 200px !important;
  padding: 0px 0px 0px 0px;
  position: absolute;
  box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.75);
}
nav.NavMenu ul li:hover ul {
  display: block;
  cursor: pointer;
}
header nav.NavMenu ul li:hover,
header .NavMenu ul li a:hover {
  background: #242c39;
  color: #dddddd;
  cursor: pointer;
}
nav.NavMenu a {
  display: block;
  text-decoration: none;
}
nav.NavMenu ul li ul a {
  display: block;
  margin: 0px !important;
 ...

JavaScript

document.addEventListener('DOMContentLoaded', () => {
  const quill = new Quill('#editor', {
    theme: 'snow',
    modules: {
      toolbar: {
        container: '#toolbar',
        handlers: {
          undo: function () {
            this.quill.history.undo();
          },
          redo: function () {
            this.quill.history.redo();
          },
          clear: function () {
            this.quill.setText('');
            this.quill.history.clear();
          },
        },
      },
      history: {
        delay: 1000,
        maxStack: 100,
        userOnly: true,
      },
    },
  });
});