diff --git a/src/editor/components/ToolButton.js b/src/editor/components/ToolButton.js
new file mode 100644
index 00000000..e7185495
--- /dev/null
+++ b/src/editor/components/ToolButton.js
@@ -0,0 +1,109 @@
+const template = document.createElement('template');
+template.innerHTML = `
+
+
+

+
+`;
+/**
+ * @class ToolButton
+ */
+export class ToolButton extends HTMLElement {
+ /**
+ * @function constructor
+ */
+ constructor () {
+ super();
+ // create the shadowDom and insert the template
+ this._shadowRoot = this.attachShadow({mode: 'closed'});
+ this._shadowRoot.appendChild(template.content.cloneNode(true));
+ // locate the component
+ this.$div = this._shadowRoot.querySelector('div');
+ this.$img = this._shadowRoot.querySelector('img');
+ }
+ /**
+ * @function observedAttributes
+ * @returns {any} observed
+ */
+ static get observedAttributes () {
+ return ['title', 'src'];
+ }
+ /**
+ * @function attributeChangedCallback
+ * @param {string} name
+ * @param {string} oldValue
+ * @param {string} newValue
+ * @returns {void}
+ */
+ attributeChangedCallback (name, oldValue, newValue) {
+ if (oldValue === newValue) return;
+ switch (name) {
+ case 'title':
+ this.$div.setAttribute('title', newValue);
+ break;
+ case 'src':
+ this.$img.setAttribute('src', newValue);
+ break;
+ default:
+ // eslint-disable-next-line no-console
+ console.error(`unknown attribute: ${name}`);
+ break;
+ }
+ console.log(name, oldValue, newValue);
+ }
+ /**
+ * @function get
+ * @returns {any}
+ */
+ get title () {
+ return this.getAttribute('title');
+ }
+
+ /**
+ * @function set
+ * @returns {void}
+ */
+ set title (value) {
+ this.setAttribute('title', value);
+ }
+ /**
+ * @function get
+ * @returns {any}
+ */
+ get src () {
+ return this.getAttribute('src');
+ }
+
+ /**
+ * @function set
+ * @returns {void}
+ */
+ set src (value) {
+ this.setAttribute('src', value);
+ }
+}
+
+// Register
+customElements.define('tool-button', ToolButton);
diff --git a/src/editor/components/index.js b/src/editor/components/index.js
new file mode 100644
index 00000000..3946dd8c
--- /dev/null
+++ b/src/editor/components/index.js
@@ -0,0 +1 @@
+import './ToolButton.js';
diff --git a/src/editor/images/source.svg b/src/editor/images/source.svg
new file mode 100644
index 00000000..3b9171ae
--- /dev/null
+++ b/src/editor/images/source.svg
@@ -0,0 +1,9 @@
+
\ No newline at end of file
diff --git a/src/editor/index.html b/src/editor/index.html
index 2dbc5836..26e4ff5a 100644
--- a/src/editor/index.html
+++ b/src/editor/index.html
@@ -120,7 +120,7 @@