diff --git a/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/ChartInitializer.ts b/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/ChartInitializer.ts
index fe071d31ebaf779d0ef8c027b277210675c833be..9fda1ed4e067e6cbea1f81f807610bdc9e116e12 100644
--- a/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/ChartInitializer.ts
+++ b/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/ChartInitializer.ts
@@ -11,34 +11,31 @@
 * The TYPO3 project - inspiring people to share!
 */
 
-import * as $ from 'jquery';
 import * as Chart from 'TYPO3/CMS/Dashboard/Contrib/chartjs';
+import RegularEvent = require('TYPO3/CMS/Core/Event/RegularEvent');
 
 class ChartInitializer {
 
-  private selector: string = '.dashboard-item--chart';
+  private readonly selector: string = '.dashboard-item--chart';
 
   constructor() {
-    $((): void => {
-      this.initialize();
-    });
+    this.initialize();
   }
 
   public initialize(): void {
-    const me = this;
-    $(document).on('widgetContentRendered', me.selector, (e: JQueryEventObject, config: any): void => {
+    new RegularEvent('widgetContentRendered', function (this: HTMLElement, e: CustomEvent): void {
       e.preventDefault();
-      const $me = $(e.currentTarget);
+      const config: any = e.detail;
 
       if (typeof undefined === config.graphConfig) {
         return;
       }
 
-      let _canvas: any = $me.find('canvas:first');
+      let _canvas: any = this.querySelector('canvas');
       let context;
 
-      if (_canvas.length > 0) {
-        context = _canvas[0].getContext('2d');
+      if (_canvas !== null) {
+        context = _canvas.getContext('2d');
       }
 
       if (typeof undefined === context) {
@@ -46,7 +43,7 @@ class ChartInitializer {
       }
 
       new Chart(context, config.graphConfig)
-    });
+    }).delegateTo(document, this.selector)
   }
 }
 
diff --git a/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/DashboardDelete.ts b/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/DashboardDelete.ts
index 946b03bef029c57cf04769978ddab4edee3e05d1..22ee1677028048586227b2d5b2640eccef4c79c8 100644
--- a/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/DashboardDelete.ts
+++ b/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/DashboardDelete.ts
@@ -11,38 +11,33 @@
 * The TYPO3 project - inspiring people to share!
 */
 
-import * as $ from 'jquery';
 import Modal = require('TYPO3/CMS/Backend/Modal');
 import {SeverityEnum} from 'TYPO3/CMS/Backend/Enum/Severity';
+import RegularEvent = require('TYPO3/CMS/Core/Event/RegularEvent');
 
 class DashboardDelete {
 
-  private selector: string = '.js-dashboard-delete';
+  private readonly selector: string = '.js-dashboard-delete';
 
   constructor() {
-    $((): void => {
-      this.initialize();
-    });
+    this.initialize();
   }
 
   public initialize(): void {
-    const me = this;
-    $(document).on('click', me.selector, (e: JQueryEventObject): void => {
+    new RegularEvent('click', function (this: HTMLElement, e: Event): void {
       e.preventDefault();
-      const $me = $(e.currentTarget);
-
       const $modal = Modal.confirm(
-        $me.data('modal-title'),
-        $me.data('modal-question'),
+        this.dataset.modalTitle,
+        this.dataset.modalQuestion,
         SeverityEnum.warning, [
           {
-            text: $me.data('modal-cancel'),
+            text: this.dataset.modalCancel,
             active: true,
             btnClass: 'btn-default',
             name: 'cancel',
           },
           {
-            text: $me.data('modal-ok'),
+            text: this.dataset.modalOk,
             btnClass: 'btn-warning',
             name: 'delete',
           },
@@ -51,11 +46,11 @@ class DashboardDelete {
 
       $modal.on('button.clicked', (e: JQueryEventObject): void => {
         if (e.target.getAttribute('name') === 'delete') {
-          window.location.href = $me.attr('href');
+          window.location.href = this.getAttribute('href');
         }
         Modal.dismiss();
       });
-    });
+    }).delegateTo(document, this.selector);
   }
 }
 
diff --git a/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/DashboardModal.ts b/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/DashboardModal.ts
index b6e4cb377b4410908262ea26ac8277ce99617aea..aec12b9e8457d358477d0e666ce211f90e81742e 100644
--- a/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/DashboardModal.ts
+++ b/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/DashboardModal.ts
@@ -14,29 +14,25 @@
 import * as $ from 'jquery';
 import Modal = require('TYPO3/CMS/Backend/Modal');
 import {SeverityEnum} from 'TYPO3/CMS/Backend/Enum/Severity';
+import RegularEvent = require('TYPO3/CMS/Core/Event/RegularEvent');
 
 class DashboardModal {
 
-  private selector: string = '.js-dashboard-modal';
+  private readonly selector: string = '.js-dashboard-modal';
 
   constructor() {
-    $((): void => {
-      this.initialize();
-    });
+    this.initialize();
   }
 
   public initialize(): void {
-    const me = this;
-    $(document).on('click', me.selector, (e: JQueryEventObject): void => {
+    new RegularEvent('click', function (this: HTMLElement, e: Event): void {
       e.preventDefault();
-      const $me = $(e.currentTarget);
-
       const configuration = {
         type: Modal.types.default,
-        title: $me.data('modal-title'),
+        title: this.dataset.modalTitle,
         size: Modal.sizes.medium,
         severity: SeverityEnum.notice,
-        content: $($('#dashboardModal-' + $me.data('modal-identifier')).html()),
+        content: $(document.querySelector(`#dashboardModal-${this.dataset.modalIdentifier}`).innerHTML),
         additionalCssClasses: ['dashboard-modal'],
         callback: (currentModal: any): void => {
           currentModal.on('submit', '.dashboardModal-form', (e: JQueryEventObject): void => {
@@ -46,7 +42,7 @@ class DashboardModal {
           currentModal.on('button.clicked', (e: JQueryEventObject): void => {
             if (e.target.getAttribute('name') === 'save') {
               const formElement = currentModal.find('form');
-              $('<input type="submit">').hide().appendTo(formElement).click().remove();
+              formElement.submit();
             } else {
               currentModal.trigger('modal-dismiss');
             }
@@ -54,12 +50,12 @@ class DashboardModal {
         },
         buttons: [
           {
-            text: $me.data('button-close-text'),
+            text: this.dataset.buttonCloseText,
             btnClass: 'btn-default',
             name: 'cancel',
           },
           {
-            text: $me.data('button-ok-text'),
+            text: this.dataset.buttonOkText,
             active: true,
             btnClass: 'btn-warning',
             name: 'save',
@@ -67,7 +63,7 @@ class DashboardModal {
         ]
       };
       Modal.advanced(configuration);
-    });
+    }).delegateTo(document, this.selector);
   }
 }
 
diff --git a/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/Grid.ts b/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/Grid.ts
index b3cc9865903cb85b34f006bb0496d4452234a90f..353af8a3524b43d24688d271feaf5b952c478a95 100644
--- a/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/Grid.ts
+++ b/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/Grid.ts
@@ -11,18 +11,16 @@
 * The TYPO3 project - inspiring people to share!
 */
 
-import * as $ from 'jquery';
 import * as Muuri from 'muuri';
 import {AjaxResponse} from 'TYPO3/CMS/Core/Ajax/AjaxResponse';
 import AjaxRequest = require('TYPO3/CMS/Core/Ajax/AjaxRequest');
+import RegularEvent = require('TYPO3/CMS/Core/Event/RegularEvent');
 
 class Grid {
-  private selector: string = '.dashboard-grid';
+  private readonly selector: string = '.dashboard-grid';
 
   constructor() {
-    $((): void => {
-      this.initialize();
-    });
+    this.initialize();
   }
 
   public initialize(): void {
@@ -57,19 +55,23 @@ class Grid {
       }
     };
 
-    if ($(this.selector).length) {
+    if (document.querySelector(this.selector) !== null) {
       const dashboard = new Muuri(this.selector, options);
       dashboard.on('dragStart', (): void => {
-        $('.dashboard-item').removeClass('dashboard-item--enableSelect');
-      })
+        document.querySelectorAll('.dashboard-item').forEach((dashboardItem: HTMLDivElement): void => {
+          dashboardItem.classList.remove('dashboard-item--enableSelect');
+        });
+      });
       dashboard.on('dragReleaseEnd', (): void => {
-        $('.dashboard-item').addClass('dashboard-item--enableSelect');
+        document.querySelectorAll('.dashboard-item').forEach((dashboardItem: HTMLDivElement): void => {
+          dashboardItem.classList.add('dashboard-item--enableSelect');
+        });
         this.saveItems(dashboard);
-      })
+      });
 
-      $('.dashboard-item').on('widgetContentRendered', (): void => {
+      new RegularEvent('widgetContentRendered', (): void => {
         dashboard.refreshItems().layout();
-      });
+      }).delegateTo(document, '.dashboard-item');
     }
   }
 
diff --git a/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/WidgetContentCollector.ts b/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/WidgetContentCollector.ts
index 893175fd1b6b47db1963e860a1aaadc2bb72588f..709327a10c5b3eb30142961123960a7718760436 100644
--- a/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/WidgetContentCollector.ts
+++ b/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/WidgetContentCollector.ts
@@ -11,45 +11,59 @@
 * The TYPO3 project - inspiring people to share!
 */
 
-import * as $ from 'jquery';
 import {AjaxResponse} from 'TYPO3/CMS/Core/Ajax/AjaxResponse';
 import AjaxRequest = require('TYPO3/CMS/Core/Ajax/AjaxRequest');
 
 class WidgetContentCollector {
 
-  private selector: string = '.dashboard-item';
+  private readonly selector: string = '.dashboard-item';
 
   constructor() {
-    $((): void => {
-      this.initialize();
-    });
+    this.initialize();
   }
 
   public initialize(): void {
-    $(this.selector).each((index: number, triggerElement: Element): void => {
+    const items = document.querySelectorAll(this.selector);
+    items.forEach((triggerElement: HTMLElement): void => {
+      const widgetWaitingElement = triggerElement.querySelector('.widget-waiting');
+      const widgetContentElement = triggerElement.querySelector('.widget-content');
+      const widgetErrorElement = triggerElement.querySelector('.widget-error');
+
       const sentRequest = (new AjaxRequest(TYPO3.settings.ajaxUrls['ext-dashboard-get-widget-content']))
         .withQueryArguments({
-          widget: $(triggerElement).data('widget-key'),
+          widget: triggerElement.dataset.widgetKey,
         })
         .get()
         .then(async (response: AjaxResponse): Promise<any> => {
           const data = await response.resolve();
-          $(triggerElement).find('.widget-content').html(data.content);
-          $(triggerElement).find('.widget-content').removeClass('hide');
-          $(triggerElement).find('.widget-waiting').addClass('hide');
+          if (widgetContentElement !== null) {
+            widgetContentElement.innerHTML = data.content;
+            widgetContentElement.classList.remove('hide');
+          }
+          if (widgetWaitingElement !== null) {
+            widgetWaitingElement.classList.add('hide');
+          }
 
+          let event: Event;
+          const eventInitDict: EventInit = {
+            bubbles: true,
+          };
           if (Object.keys(data.eventdata).length > 0) {
-            $(triggerElement).trigger('widgetContentRendered', data.eventdata);
+            event = new CustomEvent('widgetContentRendered', {...eventInitDict, detail: data.eventdata});
           } else {
-            $(triggerElement).trigger('widgetContentRendered');
+            event = new Event('widgetContentRendered', eventInitDict);
           }
-        }
-        );
+          triggerElement.dispatchEvent(event);
+        });
 
       sentRequest.catch((reason: Error): void => {
-        $(triggerElement).find('.widget-error').removeClass('hide');
-        $(triggerElement).find('.widget-waiting').addClass('hide');
-        console.warn('Error while retrieving widget [' + $(triggerElement).data('widget-key') + '] content: ' + reason.message)
+        if (widgetErrorElement !== null) {
+          widgetErrorElement.classList.remove('hide');
+        }
+        if (widgetWaitingElement !== null) {
+          widgetWaitingElement.classList.add('hide');
+        }
+        console.warn(`Error while retrieving widget [${triggerElement.dataset.widgetKey}] content: ${reason.message}`);
       });
     });
   }
diff --git a/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/WidgetRemover.ts b/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/WidgetRemover.ts
index a9c871b9e1064f50464f6e13c971367dacd6123c..6e439ab4edda06ec510b7e00cbcf0ad6b6eed3ab 100644
--- a/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/WidgetRemover.ts
+++ b/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/WidgetRemover.ts
@@ -11,38 +11,33 @@
 * The TYPO3 project - inspiring people to share!
 */
 
-import * as $ from 'jquery';
 import Modal = require('TYPO3/CMS/Backend/Modal');
 import {SeverityEnum} from 'TYPO3/CMS/Backend/Enum/Severity';
+import RegularEvent = require('TYPO3/CMS/Core/Event/RegularEvent');
 
 class WidgetRemover {
 
-  private selector: string = '.js-dashboard-remove-widget';
+  private readonly selector: string = '.js-dashboard-remove-widget';
 
   constructor() {
-    $((): void => {
-      this.initialize();
-    });
+    this.initialize();
   }
 
   public initialize(): void {
-    const me = this;
-    $(document).on('click', me.selector, (e: JQueryEventObject): void => {
+    new RegularEvent('click', function (this: HTMLElement, e: Event): void {
       e.preventDefault();
-      const $me = $(e.currentTarget);
-
       const $modal = Modal.confirm(
-        $me.data('modal-title'),
-        $me.data('modal-question'),
+        this.dataset.modalTitle,
+        this.dataset.modalQuestion,
         SeverityEnum.warning, [
           {
-            text: $me.data('modal-cancel'),
+            text: this.dataset.modalCancel,
             active: true,
             btnClass: 'btn-default',
             name: 'cancel',
           },
           {
-            text: $me.data('modal-ok'),
+            text: this.dataset.modalOk,
             btnClass: 'btn-warning',
             name: 'delete',
           },
@@ -51,11 +46,11 @@ class WidgetRemover {
 
       $modal.on('button.clicked', (e: JQueryEventObject): void => {
         if (e.target.getAttribute('name') === 'delete') {
-          window.location.href = $me.attr('href');
+          window.location.href = this.getAttribute('href');
         }
         Modal.dismiss();
       });
-    });
+    }).delegateTo(document, this.selector);
   }
 }
 
diff --git a/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/WidgetSelector.ts b/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/WidgetSelector.ts
index 1f96a1118eac0aa19c9a74c77216358dce876670..7a5afb16f8bbace9618b2801439130ce42f2023e 100644
--- a/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/WidgetSelector.ts
+++ b/Build/Sources/TypeScript/dashboard/Resources/Public/TypeScript/WidgetSelector.ts
@@ -14,38 +14,34 @@
 import * as $ from 'jquery';
 import Modal = require('TYPO3/CMS/Backend/Modal');
 import {SeverityEnum} from 'TYPO3/CMS/Backend/Enum/Severity';
+import RegularEvent = require('TYPO3/CMS/Core/Event/RegularEvent');
 
 class WidgetSelector {
 
-  private selector: string = '.js-dashboard-addWidget';
+  private readonly selector: string = '.js-dashboard-addWidget';
 
   constructor() {
-    $((): void => {
-      this.initialize();
-    });
+    this.initialize();
   }
 
   public initialize(): void {
-    const me = this;
-    $(document).on('click', me.selector, (e: JQueryEventObject): void => {
+    new RegularEvent('click', function (this: HTMLElement, e: Event): void {
       e.preventDefault();
-      const $me = $(e.currentTarget);
-
       const configuration = {
         type: Modal.types.default,
-        title: $me.data('modal-title'),
+        title: this.dataset.modalTitle,
         size: Modal.sizes.medium,
         severity: SeverityEnum.notice,
-        content: $($('#widgetSelector').html()),
+        content: $(document.getElementById('widgetSelector').innerHTML),
         additionalCssClasses: ['dashboard-modal'],
-        callback: (currentModal: any): void => {
+        callback: (currentModal: JQuery): void => {
           currentModal.on('click', 'a.dashboard-modal-item-block', (e: JQueryEventObject): void => {
             currentModal.trigger('modal-dismiss');
           });
         },
       };
       Modal.advanced(configuration);
-    });
+    }).delegateTo(document, this.selector);
   }
 }
 
diff --git a/typo3/sysext/dashboard/Resources/Public/JavaScript/ChartInitializer.js b/typo3/sysext/dashboard/Resources/Public/JavaScript/ChartInitializer.js
index a10005664ecd3f70adf716777411ad534d270e32..4a9a2fb7490f7290e420d53f8a262eef45ef4cc5 100644
--- a/typo3/sysext/dashboard/Resources/Public/JavaScript/ChartInitializer.js
+++ b/typo3/sysext/dashboard/Resources/Public/JavaScript/ChartInitializer.js
@@ -10,4 +10,4 @@
  *
  * The TYPO3 project - inspiring people to share!
  */
-define(["require","exports","jquery","TYPO3/CMS/Dashboard/Contrib/chartjs"],(function(e,t,n,r){"use strict";return new class{constructor(){this.selector=".dashboard-item--chart",n(()=>{this.initialize()})}initialize(){n(document).on("widgetContentRendered",this.selector,(e,t)=>{e.preventDefault();const i=n(e.currentTarget);if("undefined"===t.graphConfig)return;let s,o=i.find("canvas:first");o.length>0&&(s=o[0].getContext("2d")),"undefined"!==s&&new r(s,t.graphConfig)})}}}));
\ No newline at end of file
+define(["require","exports","TYPO3/CMS/Dashboard/Contrib/chartjs","TYPO3/CMS/Core/Event/RegularEvent"],(function(e,t,n,i){"use strict";return new class{constructor(){this.selector=".dashboard-item--chart",this.initialize()}initialize(){new i("widgetContentRendered",(function(e){e.preventDefault();const t=e.detail;if("undefined"===t.graphConfig)return;let i,r=this.querySelector("canvas");null!==r&&(i=r.getContext("2d")),"undefined"!==i&&new n(i,t.graphConfig)})).delegateTo(document,this.selector)}}}));
\ No newline at end of file
diff --git a/typo3/sysext/dashboard/Resources/Public/JavaScript/DashboardDelete.js b/typo3/sysext/dashboard/Resources/Public/JavaScript/DashboardDelete.js
index 91c878e445ef77d497e0babed6ae0d0eff1c9784..12c4b3c3820c0f5eab797f3d6878f0b2e17ac959 100644
--- a/typo3/sysext/dashboard/Resources/Public/JavaScript/DashboardDelete.js
+++ b/typo3/sysext/dashboard/Resources/Public/JavaScript/DashboardDelete.js
@@ -10,4 +10,4 @@
  *
  * The TYPO3 project - inspiring people to share!
  */
-define(["require","exports","jquery","TYPO3/CMS/Backend/Modal","TYPO3/CMS/Backend/Enum/Severity"],(function(e,t,a,n,i){"use strict";return new class{constructor(){this.selector=".js-dashboard-delete",a(()=>{this.initialize()})}initialize(){a(document).on("click",this.selector,e=>{e.preventDefault();const t=a(e.currentTarget);n.confirm(t.data("modal-title"),t.data("modal-question"),i.SeverityEnum.warning,[{text:t.data("modal-cancel"),active:!0,btnClass:"btn-default",name:"cancel"},{text:t.data("modal-ok"),btnClass:"btn-warning",name:"delete"}]).on("button.clicked",e=>{"delete"===e.target.getAttribute("name")&&(window.location.href=t.attr("href")),n.dismiss()})})}}}));
\ No newline at end of file
+define(["require","exports","TYPO3/CMS/Backend/Modal","TYPO3/CMS/Backend/Enum/Severity","TYPO3/CMS/Core/Event/RegularEvent"],(function(e,t,n,i,a){"use strict";return new class{constructor(){this.selector=".js-dashboard-delete",this.initialize()}initialize(){new a("click",(function(e){e.preventDefault(),n.confirm(this.dataset.modalTitle,this.dataset.modalQuestion,i.SeverityEnum.warning,[{text:this.dataset.modalCancel,active:!0,btnClass:"btn-default",name:"cancel"},{text:this.dataset.modalOk,btnClass:"btn-warning",name:"delete"}]).on("button.clicked",e=>{"delete"===e.target.getAttribute("name")&&(window.location.href=this.getAttribute("href")),n.dismiss()})})).delegateTo(document,this.selector)}}}));
\ No newline at end of file
diff --git a/typo3/sysext/dashboard/Resources/Public/JavaScript/DashboardModal.js b/typo3/sysext/dashboard/Resources/Public/JavaScript/DashboardModal.js
index 28a29340f1f7799c83a3da1b4e05ab7050cb70b1..16366201822a0536627b266b106ae171563c2c7a 100644
--- a/typo3/sysext/dashboard/Resources/Public/JavaScript/DashboardModal.js
+++ b/typo3/sysext/dashboard/Resources/Public/JavaScript/DashboardModal.js
@@ -10,4 +10,4 @@
  *
  * The TYPO3 project - inspiring people to share!
  */
-define(["require","exports","jquery","TYPO3/CMS/Backend/Modal","TYPO3/CMS/Backend/Enum/Severity"],(function(t,e,a,i,s){"use strict";return new class{constructor(){this.selector=".js-dashboard-modal",a(()=>{this.initialize()})}initialize(){a(document).on("click",this.selector,t=>{t.preventDefault();const e=a(t.currentTarget),n={type:i.types.default,title:e.data("modal-title"),size:i.sizes.medium,severity:s.SeverityEnum.notice,content:a(a("#dashboardModal-"+e.data("modal-identifier")).html()),additionalCssClasses:["dashboard-modal"],callback:t=>{t.on("submit",".dashboardModal-form",e=>{t.trigger("modal-dismiss")}),t.on("button.clicked",e=>{if("save"===e.target.getAttribute("name")){const e=t.find("form");a('<input type="submit">').hide().appendTo(e).click().remove()}else t.trigger("modal-dismiss")})},buttons:[{text:e.data("button-close-text"),btnClass:"btn-default",name:"cancel"},{text:e.data("button-ok-text"),active:!0,btnClass:"btn-warning",name:"save"}]};i.advanced(n)})}}}));
\ No newline at end of file
+define(["require","exports","jquery","TYPO3/CMS/Backend/Modal","TYPO3/CMS/Backend/Enum/Severity","TYPO3/CMS/Core/Event/RegularEvent"],(function(t,e,a,s,i,n){"use strict";return new class{constructor(){this.selector=".js-dashboard-modal",this.initialize()}initialize(){new n("click",(function(t){t.preventDefault();const e={type:s.types.default,title:this.dataset.modalTitle,size:s.sizes.medium,severity:i.SeverityEnum.notice,content:a(document.querySelector(`#dashboardModal-${this.dataset.modalIdentifier}`).innerHTML),additionalCssClasses:["dashboard-modal"],callback:t=>{t.on("submit",".dashboardModal-form",e=>{t.trigger("modal-dismiss")}),t.on("button.clicked",e=>{if("save"===e.target.getAttribute("name")){t.find("form").submit()}else t.trigger("modal-dismiss")})},buttons:[{text:this.dataset.buttonCloseText,btnClass:"btn-default",name:"cancel"},{text:this.dataset.buttonOkText,active:!0,btnClass:"btn-warning",name:"save"}]};s.advanced(e)})).delegateTo(document,this.selector)}}}));
\ No newline at end of file
diff --git a/typo3/sysext/dashboard/Resources/Public/JavaScript/Grid.js b/typo3/sysext/dashboard/Resources/Public/JavaScript/Grid.js
index 3c2df370506dc25f2bb8cd984a687404b512ef1c..ad97067b277b95bb694c39840337cd7c39546a6d 100644
--- a/typo3/sysext/dashboard/Resources/Public/JavaScript/Grid.js
+++ b/typo3/sysext/dashboard/Resources/Public/JavaScript/Grid.js
@@ -10,4 +10,4 @@
  *
  * The TYPO3 project - inspiring people to share!
  */
-define(["require","exports","jquery","muuri","TYPO3/CMS/Core/Ajax/AjaxRequest"],(function(e,t,a,s,r){"use strict";return new class{constructor(){this.selector=".dashboard-grid",a(()=>{this.initialize()})}initialize(){const e={dragEnabled:!0,dragSortHeuristics:{sortInterval:50,minDragDistance:10,minBounceBackAngle:1},layoutDuration:400,layoutEasing:"ease",dragPlaceholder:{enabled:!0,duration:400,createElement:e=>e.getElement().cloneNode(!0)},dragSortPredicate:{action:"move",threshold:30},dragStartPredicate:{handle:".js-dashboard-move-widget"},dragReleaseDuration:400,dragReleaseEasing:"ease",layout:{fillGaps:!1,rounding:!1}};if(a(this.selector).length){const t=new s(this.selector,e);t.on("dragStart",()=>{a(".dashboard-item").removeClass("dashboard-item--enableSelect")}),t.on("dragReleaseEnd",()=>{a(".dashboard-item").addClass("dashboard-item--enableSelect"),this.saveItems(t)}),a(".dashboard-item").on("widgetContentRendered",()=>{t.refreshItems().layout()})}}saveItems(e){let t=e.getItems().map((function(e){return[e.getElement().getAttribute("data-widget-key"),e.getElement().getAttribute("data-widget-hash")]}));new r(TYPO3.settings.ajaxUrls["ext-dashboard-save-widget-positions"]).post({widgets:t}).then(async e=>{await e.resolve()})}}}));
\ No newline at end of file
+define(["require","exports","muuri","TYPO3/CMS/Core/Ajax/AjaxRequest","TYPO3/CMS/Core/Event/RegularEvent"],(function(e,t,a,r,s){"use strict";return new class{constructor(){this.selector=".dashboard-grid",this.initialize()}initialize(){const e={dragEnabled:!0,dragSortHeuristics:{sortInterval:50,minDragDistance:10,minBounceBackAngle:1},layoutDuration:400,layoutEasing:"ease",dragPlaceholder:{enabled:!0,duration:400,createElement:e=>e.getElement().cloneNode(!0)},dragSortPredicate:{action:"move",threshold:30},dragStartPredicate:{handle:".js-dashboard-move-widget"},dragReleaseDuration:400,dragReleaseEasing:"ease",layout:{fillGaps:!1,rounding:!1}};if(null!==document.querySelector(this.selector)){const t=new a(this.selector,e);t.on("dragStart",()=>{document.querySelectorAll(".dashboard-item").forEach(e=>{e.classList.remove("dashboard-item--enableSelect")})}),t.on("dragReleaseEnd",()=>{document.querySelectorAll(".dashboard-item").forEach(e=>{e.classList.add("dashboard-item--enableSelect")}),this.saveItems(t)}),new s("widgetContentRendered",()=>{t.refreshItems().layout()}).delegateTo(document,".dashboard-item")}}saveItems(e){let t=e.getItems().map((function(e){return[e.getElement().getAttribute("data-widget-key"),e.getElement().getAttribute("data-widget-hash")]}));new r(TYPO3.settings.ajaxUrls["ext-dashboard-save-widget-positions"]).post({widgets:t}).then(async e=>{await e.resolve()})}}}));
\ No newline at end of file
diff --git a/typo3/sysext/dashboard/Resources/Public/JavaScript/WidgetContentCollector.js b/typo3/sysext/dashboard/Resources/Public/JavaScript/WidgetContentCollector.js
index 6f4a9425eaeced830a16cdee5a08cf33e4482fb0..7e3bf0d2d451bc92c95107a3130e273c77275d7f 100644
--- a/typo3/sysext/dashboard/Resources/Public/JavaScript/WidgetContentCollector.js
+++ b/typo3/sysext/dashboard/Resources/Public/JavaScript/WidgetContentCollector.js
@@ -10,4 +10,4 @@
  *
  * The TYPO3 project - inspiring people to share!
  */
-define(["require","exports","jquery","TYPO3/CMS/Core/Ajax/AjaxRequest"],(function(e,t,i,n){"use strict";return new class{constructor(){this.selector=".dashboard-item",i(()=>{this.initialize()})}initialize(){i(this.selector).each((e,t)=>{new n(TYPO3.settings.ajaxUrls["ext-dashboard-get-widget-content"]).withQueryArguments({widget:i(t).data("widget-key")}).get().then(async e=>{const n=await e.resolve();i(t).find(".widget-content").html(n.content),i(t).find(".widget-content").removeClass("hide"),i(t).find(".widget-waiting").addClass("hide"),Object.keys(n.eventdata).length>0?i(t).trigger("widgetContentRendered",n.eventdata):i(t).trigger("widgetContentRendered")}).catch(e=>{i(t).find(".widget-error").removeClass("hide"),i(t).find(".widget-waiting").addClass("hide"),console.warn("Error while retrieving widget ["+i(t).data("widget-key")+"] content: "+e.message)})})}}}));
\ No newline at end of file
+define(["require","exports","TYPO3/CMS/Core/Ajax/AjaxRequest"],(function(e,t,n){"use strict";return new class{constructor(){this.selector=".dashboard-item",this.initialize()}initialize(){document.querySelectorAll(this.selector).forEach(e=>{const t=e.querySelector(".widget-waiting"),s=e.querySelector(".widget-content"),i=e.querySelector(".widget-error");new n(TYPO3.settings.ajaxUrls["ext-dashboard-get-widget-content"]).withQueryArguments({widget:e.dataset.widgetKey}).get().then(async n=>{const i=await n.resolve();let r;null!==s&&(s.innerHTML=i.content,s.classList.remove("hide")),null!==t&&t.classList.add("hide");const a={bubbles:!0};r=Object.keys(i.eventdata).length>0?new CustomEvent("widgetContentRendered",Object.assign(Object.assign({},a),{detail:i.eventdata})):new Event("widgetContentRendered",a),e.dispatchEvent(r)}).catch(n=>{null!==i&&i.classList.remove("hide"),null!==t&&t.classList.add("hide"),console.warn(`Error while retrieving widget [${e.dataset.widgetKey}] content: ${n.message}`)})})}}}));
\ No newline at end of file
diff --git a/typo3/sysext/dashboard/Resources/Public/JavaScript/WidgetRemover.js b/typo3/sysext/dashboard/Resources/Public/JavaScript/WidgetRemover.js
index d3dce6d771de103eecce6ddae6a771093f52f26d..8c896bef9fbc8c83afd408c280da9f43793ce6c4 100644
--- a/typo3/sysext/dashboard/Resources/Public/JavaScript/WidgetRemover.js
+++ b/typo3/sysext/dashboard/Resources/Public/JavaScript/WidgetRemover.js
@@ -10,4 +10,4 @@
  *
  * The TYPO3 project - inspiring people to share!
  */
-define(["require","exports","jquery","TYPO3/CMS/Backend/Modal","TYPO3/CMS/Backend/Enum/Severity"],(function(e,t,a,n,i){"use strict";return new class{constructor(){this.selector=".js-dashboard-remove-widget",a(()=>{this.initialize()})}initialize(){a(document).on("click",this.selector,e=>{e.preventDefault();const t=a(e.currentTarget);n.confirm(t.data("modal-title"),t.data("modal-question"),i.SeverityEnum.warning,[{text:t.data("modal-cancel"),active:!0,btnClass:"btn-default",name:"cancel"},{text:t.data("modal-ok"),btnClass:"btn-warning",name:"delete"}]).on("button.clicked",e=>{"delete"===e.target.getAttribute("name")&&(window.location.href=t.attr("href")),n.dismiss()})})}}}));
\ No newline at end of file
+define(["require","exports","TYPO3/CMS/Backend/Modal","TYPO3/CMS/Backend/Enum/Severity","TYPO3/CMS/Core/Event/RegularEvent"],(function(e,t,i,n,a){"use strict";return new class{constructor(){this.selector=".js-dashboard-remove-widget",this.initialize()}initialize(){new a("click",(function(e){e.preventDefault(),i.confirm(this.dataset.modalTitle,this.dataset.modalQuestion,n.SeverityEnum.warning,[{text:this.dataset.modalCancel,active:!0,btnClass:"btn-default",name:"cancel"},{text:this.dataset.modalOk,btnClass:"btn-warning",name:"delete"}]).on("button.clicked",e=>{"delete"===e.target.getAttribute("name")&&(window.location.href=this.getAttribute("href")),i.dismiss()})})).delegateTo(document,this.selector)}}}));
\ No newline at end of file
diff --git a/typo3/sysext/dashboard/Resources/Public/JavaScript/WidgetSelector.js b/typo3/sysext/dashboard/Resources/Public/JavaScript/WidgetSelector.js
index 242fb164bf546ec4e8d5873841030619d6431234..aa4b66fb8c28105c9d6f67abf55e964ad4364321 100644
--- a/typo3/sysext/dashboard/Resources/Public/JavaScript/WidgetSelector.js
+++ b/typo3/sysext/dashboard/Resources/Public/JavaScript/WidgetSelector.js
@@ -10,4 +10,4 @@
  *
  * The TYPO3 project - inspiring people to share!
  */
-define(["require","exports","jquery","TYPO3/CMS/Backend/Modal","TYPO3/CMS/Backend/Enum/Severity"],(function(e,t,i,a,s){"use strict";return new class{constructor(){this.selector=".js-dashboard-addWidget",i(()=>{this.initialize()})}initialize(){i(document).on("click",this.selector,e=>{e.preventDefault();const t=i(e.currentTarget),d={type:a.types.default,title:t.data("modal-title"),size:a.sizes.medium,severity:s.SeverityEnum.notice,content:i(i("#widgetSelector").html()),additionalCssClasses:["dashboard-modal"],callback:e=>{e.on("click","a.dashboard-modal-item-block",t=>{e.trigger("modal-dismiss")})}};a.advanced(d)})}}}));
\ No newline at end of file
+define(["require","exports","jquery","TYPO3/CMS/Backend/Modal","TYPO3/CMS/Backend/Enum/Severity","TYPO3/CMS/Core/Event/RegularEvent"],(function(e,t,i,a,s,d){"use strict";return new class{constructor(){this.selector=".js-dashboard-addWidget",this.initialize()}initialize(){new d("click",(function(e){e.preventDefault();const t={type:a.types.default,title:this.dataset.modalTitle,size:a.sizes.medium,severity:s.SeverityEnum.notice,content:i(document.getElementById("widgetSelector").innerHTML),additionalCssClasses:["dashboard-modal"],callback:e=>{e.on("click","a.dashboard-modal-item-block",t=>{e.trigger("modal-dismiss")})}};a.advanced(t)})).delegateTo(document,this.selector)}}}));
\ No newline at end of file