diff --git a/docs/package.json b/docs/package.json
index 9fb4965664ac..c724dcce63db 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -10,6 +10,7 @@
"private": true,
"devDependencies": {
"anchor-js": "^4.1.0",
+ "codemirror": "5.30.0",
"cross-env": "^3.2.3",
"escape-html": "^1.0.3",
"laravel-mix": "^1.5.1",
diff --git a/docs/source/_assets/js/app.js b/docs/source/_assets/js/app.js
index 068b4f79ba20..2a3221a7d050 100644
--- a/docs/source/_assets/js/app.js
+++ b/docs/source/_assets/js/app.js
@@ -5,6 +5,7 @@ window.anchors = new anchorJS()
window.Vue = require('vue')
Vue.component('responsive-code-sample', require('./components/ResponsiveCodeSample.vue'))
+Vue.component('code-sample-editor', require('./components/CodeSampleEditor.vue'))
const app = new Vue({
el: '#app'
diff --git a/docs/source/_assets/js/components/CodeSampleEditor.vue b/docs/source/_assets/js/components/CodeSampleEditor.vue
new file mode 100644
index 000000000000..5883d774da6a
--- /dev/null
+++ b/docs/source/_assets/js/components/CodeSampleEditor.vue
@@ -0,0 +1,116 @@
+
+
{{ e($code ?? $slot) }}