diff --git a/development/playground/dom/main.js b/development/playground/dom/main.js
index 11bf6acb3bee038f9b60e22aa185b2742c17361b..4ccf1601ce58c792930026ae98739d616a828832 100644
--- a/development/playground/dom/main.js
+++ b/development/playground/dom/main.js
@@ -15,7 +15,7 @@ import "../../../source/components/style/typography.pcss";
 //import "../../../source/components/host/host.mjs";
 import "../../../source/components/form/button.mjs";
 
-
+ 
 // // import "../../../source/components/pagination.mjs";
 // import "../../../source/components/datatable.mjs";
 // import "../../../source/components/datasource/dom.mjs";
diff --git a/opt/scripts/build-exports.cjs b/development/scripts/buildMonsterFile.mjs
similarity index 54%
rename from opt/scripts/build-exports.cjs
rename to development/scripts/buildMonsterFile.mjs
index 1ed6abec6dc78b5dc8340d11b195936a95dd03d2..d7adeddc71e0587b9f24158312d1207ac3c30ab1 100755
--- a/opt/scripts/build-exports.cjs
+++ b/development/scripts/buildMonsterFile.mjs
@@ -1,19 +1,21 @@
-const regex = /^\s*(?<exp>(export\s+{[^}]+)})/gm;
-const fs = require('fs');
-const path = require('path')
-const basename = __dirname + '/../../source/'
+import {license, projectRoot, sourcePath} from "./import.mjs";
+import {normalize,join} from "path";
+import {opendirSync,writeFileSync,readFileSync} from "fs";
+import {extname, relative} from "path";
 
 let exportLines = []
+const regex = /^\s*(?<exp>(export\s+{[^}]+)})/gm;
+
 
 function scanSymbols(root) {
 
     let f;
     
-    const dir = fs.opendirSync(root);
+    const dir = opendirSync(root);
     while ((f = dir.readSync()) !== null) {
 
         if (f.isDirectory()) {
-            scanSymbols(path.join(root, f.name));
+            scanSymbols(join(root, f.name));
             continue;
         } else if (!f.isFile()) {
             continue;
@@ -21,38 +23,34 @@ function scanSymbols(root) {
         
         if(f.name==="monster.mjs") continue;
 
-        if ((path.extname(f.name) !== ".mjs")) {
+        if ((extname(f.name) !== ".mjs")) {
             continue;
         }
 
-        const fn = path.join(root, f.name);
-        let content = fs.readFileSync(fn, 'utf8');
+        const fn = join(root, f.name);
+        let content = readFileSync(fn, 'utf8');
 
+        let m;
         while ((m = regex.exec(content)) !== null) {
             let exp = m.groups?.exp;
             if (!exp) {
                 continue;
             }
-            exportLines.push("__PLACEHOLDER__" + " from \"./" + path.relative(basename, fn) + "\";");
+            exportLines.push("__PLACEHOLDER__" + " from \"./" + relative(sourcePath, fn) + "\";");
         }
     }
+    dir.closeSync();
 }
 
-scanSymbols(path.normalize(basename))
+scanSymbols(normalize(sourcePath))
 const content = exportLines.join("\n");
 
 const copyRightYear = new Date().getFullYear();
+const licenseText = license.replace("{{copyRightYear}}", copyRightYear);
 
-let fileContent=`
-/**
- * Copyright schukai GmbH and contributors ${copyRightYear}. All Rights Reserved.
- * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
- * SPDX-License-Identifier: AGPL-3.0-only or COMMERCIAL
- */
+let fileContent=`${licenseText}
 
-/** THIS FILE IS AUTOGENERATED AND SHOULD NOT BE EDITED DIRECTLY. **/
+// THIS FILE IS AUTOGENERATED. DO NOT EDIT THIS FILE DIRECTLY.
 
 /**
  * Main namespace for Monster.
@@ -67,15 +65,15 @@ export { Monster };
 /**
  * This class has no other purpose than to exist.
  *
- * @license AGPLv3
+ * @license AGPLv3 or commercial license
  * @since 2.0.0
  * @copyright schukai GmbH
  * @memberOf Monster
  */
 class Monster {}
 `;
-  
+
 
 // write fileContent to file
-fs.writeFileSync(basename + "monster.mjs", fileContent, 'utf8')
+writeFileSync(sourcePath + "/monster.mjs", fileContent, 'utf8')
 
diff --git a/development/scripts/buildStylePostCSS.mjs b/development/scripts/buildStylePostCSS.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..44b13b73d0f1bdfe81192ad66b1d09b843389747
--- /dev/null
+++ b/development/scripts/buildStylePostCSS.mjs
@@ -0,0 +1,109 @@
+import path from "path";
+import {runPostCSS} from "./runPostCSS.mjs";
+import {projectRoot,license} from "./import.mjs";
+import {writeFileSync, existsSync, mkdirSync} from "fs";
+
+const codeTemplate = `{{LicenseText}}
+import {addAttributeToken} from "{{backToRootPath}}dom/attributes.mjs";
+import {ATTRIBUTE_ERRORMESSAGE} from "{{backToRootPath}}dom/constants.mjs";
+
+export {{{ClassName}}StyleSheet}
+
+/**
+ * @private
+ * @type {CSSStyleSheet}
+ */
+const {{ClassName}}StyleSheet = new CSSStyleSheet();
+
+try {
+  {{ClassName}}StyleSheet.insertRule(\`
+@layer {{LayerName}} { 
+{{css}} 
+}\`, 0);
+} catch (e) {
+  addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
+}
+`;
+
+/**
+ * @param {string} sourceFile
+ * @return {string} destinationFile
+ */
+export function createScriptFilenameFromStyleFilename(sourceFile) {
+
+    const parts = sourceFile.split('/');
+    const lastIndex = parts.lastIndexOf('style', parts.length - 2);
+
+    if (lastIndex !== -1) {
+        parts[lastIndex] = 'stylesheet';
+    }
+
+    const basename = path.basename(parts[parts.length - 1]);
+    const basenameParts = basename.split('.');
+    basenameParts[basenameParts.length - 1] = 'mjs';
+    parts[parts.length - 1] = basenameParts.join('.');
+
+    return parts.join('/');
+}
+
+/**
+ *
+ * @param {string} destinationFile
+ * @param {string} sourceFile
+ * @returns {Promise<>}
+ */
+export function buildCSS(sourceFile, destinationFile) {
+
+    return new Promise((resolve, reject) => {
+
+        return runPostCSS(sourceFile, destinationFile).then(result => {
+
+
+            if (result === undefined || result.css === undefined) {
+                reject("Error processing file " + sourceFile);
+                return;
+            }
+
+            let className = path.basename(destinationFile, path.extname(destinationFile));
+            className = className.charAt(0).toUpperCase() + className.slice(1);
+            className = className.replace(/-([a-z])/g, function (g) {
+                return g[1].toUpperCase();
+            });
+            let layerName = className.toLowerCase();
+            const styleSheetRoot = path.dirname(destinationFile);
+
+            let relPath=""
+
+            if (styleSheetRoot.includes("/development/source-files")) {
+                relPath = path.relative(styleSheetRoot, projectRoot + "/development/source-files") + "/";
+            } else {
+                relPath = path.relative(styleSheetRoot, projectRoot + "/source") + "/";
+            }
+
+            let css = result.css.replace(/"/g, '\\"');
+            const code = codeTemplate
+                .replaceAll("{{backToRootPath}}", relPath)
+                .replaceAll("{{copyRightYear}}", String(new Date().getFullYear()))
+                .replaceAll("{{ClassName}}", className)
+                .replaceAll("{{LayerName}}", layerName)
+                .replaceAll("{{LicenseText}}", license)
+                .replaceAll("{{css}}", css);
+
+            const destinationDirectory = path.dirname(destinationFile);
+            if (!existsSync(destinationDirectory)) {
+                mkdirSync(destinationDirectory, {recursive: true});
+            }
+
+            try {
+                writeFileSync(destinationFile, code);
+            } catch (e) {
+                reject("Error writing file " + destinationFile);
+                return;
+            }
+
+            resolve();
+
+        }).catch(reject);
+    })
+}
+
diff --git a/development/scripts/buildStylesheets.mjs b/development/scripts/buildStylesheets.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..5d8eba38ee23991e8885d2f237524a81fd52e097
--- /dev/null
+++ b/development/scripts/buildStylesheets.mjs
@@ -0,0 +1,28 @@
+import {buildCSS, createScriptFilenameFromStyleFilename} from "./buildStylePostCSS.mjs";
+import {projectRoot} from "./import.mjs";
+import {existsSync} from "fs";
+
+// get arg 1 if the filename
+
+const filename = process.argv[2];
+if (!filename) {
+    console.error("No filename provided");
+    process.exit(1);
+}
+
+if (!filename.endsWith(".pcss")) {
+    console.error("Filename must end with .pcss");
+    process.exit(1);
+}
+
+if (existsSync(`${projectRoot}/dist`) === false) {
+    console.error("Creating dist directory");
+    process.exit(1);
+}
+
+buildCSS(filename, createScriptFilenameFromStyleFilename(filename)).then(() => {
+}).catch((e) => {
+    console.error(e.message);
+    process.exit(1);
+})
+
diff --git a/development/scripts/import.mjs b/development/scripts/import.mjs
new file mode 120000
index 0000000000000000000000000000000000000000..77d370f258c43d8aea0f4f84351e693fe82bab7f
--- /dev/null
+++ b/development/scripts/import.mjs
@@ -0,0 +1 @@
+/nix/store/0ifm782v0x3snkb3gmahqrhvv0s5cvwz-import.mjs
\ No newline at end of file
diff --git a/development/scripts/runPostCSS.mjs b/development/scripts/runPostCSS.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..c85331ae04e45164eeeac8dfdc62d233801512a2
--- /dev/null
+++ b/development/scripts/runPostCSS.mjs
@@ -0,0 +1,74 @@
+import autoprefixer from "autoprefixer";
+import cssnano from "cssnano";
+import fs from "fs";
+import path from "path";
+import postcss from "postcss";
+import postcssFluid from "postcss-fluid";
+import postcssFor from "postcss-for";
+import importCss from "postcss-import";
+import postcssMixins from "postcss-mixins";
+import postcssNesting from "postcss-nesting";
+import normalizeCss from "postcss-normalize";
+import postcssStripUnits from "postcss-strip-units";
+import {projectRoot} from "./import.mjs";
+
+
+/**
+ *
+ * @param sourceFile
+ * @param destinationFile
+ * @returns {Promise<>}
+ */
+export function runPostCSS(sourceFile, destinationFile) {
+
+    if (sourceFile === undefined || sourceFile === null || sourceFile === "") {
+        throw new Error("sourceFile is required");
+    }
+
+
+    if (!fs.existsSync(sourceFile)) {
+        throw new Error("File not found: " + sourceFile);
+    }
+
+    if (destinationFile === undefined || destinationFile === null || destinationFile === "") {
+        throw new Error("destinationFile is required");
+    }
+
+    const content = fs.readFileSync(sourceFile, 'utf8');
+    return postcss([
+        importCss({
+            path: destinationFile,
+            root: projectRoot,
+            resolve: (id, basedir, importOptions, astNode) => {
+
+                const firstTry = path.join(basedir, id);
+                if (fs.existsSync(firstTry)) {
+                    return firstTry;
+                }
+
+                const dir = path.dirname(sourceFile);
+                const fn = path.join(dir, id);
+                console.log("Trying to resolve " + fn);
+
+                return fs.realpathSync(fn);
+
+            }
+        }),
+        normalizeCss,
+        postcssMixins,
+        postcssNesting(),
+        postcssFor(),
+        postcssStripUnits({
+            functionName: 'strip-units',
+        }),
+        postcssFluid({
+            min: '320px',
+            max: '1800px',
+            functionName: 'fluid',
+        }),
+        autoprefixer,
+        cssnano
+    ]).process(content, {
+        from: sourceFile,
+    })
+}
\ No newline at end of file
diff --git a/development/source-files b/development/source-files
new file mode 120000
index 0000000000000000000000000000000000000000..bd6abfec07c6bab818095729b91f5c54c205d1f2
--- /dev/null
+++ b/development/source-files
@@ -0,0 +1 @@
+../source/
\ No newline at end of file
diff --git a/development/vite.config.js b/development/vite.config.js
index 10ae45b31fdbdf9a37b011e32dbbd1301e4ec252..0bd3da56de82f88239cab7320906082911aa2a7f 100644
--- a/development/vite.config.js
+++ b/development/vite.config.js
@@ -14,12 +14,12 @@ import postcssFor from 'postcss-for';
 import autoprefixer from 'autoprefixer';
 import postcssMixins from 'postcss-mixins';
 import postcssResponsiveType from 'postcss-responsive-type';
-
 import {ViteMinifyPlugin} from 'vite-plugin-minify'
-import { viteMockServe } from 'vite-plugin-mock';
+import {viteMockServe} from 'vite-plugin-mock';
 
-import directoryIndex from 'vite-plugin-directory-index';
+import {buildCSS,createScriptFilenameFromStyleFilename} from './scripts/buildStylePostCSS.mjs';
 
+import directoryIndex from 'vite-plugin-directory-index';
 
 function getAppRootDir() {
     let currentDir = __dirname
@@ -32,7 +32,6 @@ function getAppRootDir() {
 const rootDir = getAppRootDir()
 const developmentDir = join(rootDir, 'development')
 
-const buildStyleSheetScript = rootDir+"/opt/scripts/build-stylesheets.cjs";
 
 export default defineConfig({
     clearScreen: false,
@@ -54,26 +53,30 @@ export default defineConfig({
         ),
 
         ViteMinifyPlugin(),
-        directoryIndex({    }),
+        directoryIndex({}),
+
+        viteMockServe({
+            mockPath: developmentDir + "/mock",
+        }),
 
         {
-            name: 'postbuild-commands',
-            closeBundle: async () => {
-                exec('node '+buildStyleSheetScript, (error, stdout, stderr) => {
-                    if (error) {
-                        console.error(`exec error: ${error}`);
-                        return;
-                    }
-                    console.log(`stdout: ${stdout}`);
-                    console.error(`stderr: ${stderr}`);
-                });
+            name: 'run-script-on-pcss-change',
+            handleHotUpdate({file, server}) {
+
+                if (file.endsWith('.pcss')) {
+                    
+                    const source = file;
+                    const dest = createScriptFilenameFromStyleFilename(file);
+                    
+                     buildCSS(source, dest).then(() => {
+                      }).catch((e) => {
+                          console.error(e.message);
+                      })
+                    
+                }
             },
-        },        
-        
+        }
 
-    viteMockServe({
-        mockPath:developmentDir+ "/mock", 
-    }),
 
     ],
 
@@ -111,22 +114,22 @@ export default defineConfig({
             '^/api/commerce/orders/search': {
                 target: 'http://localhost:8090',
                 changeOrigin: false,
-                
+
                 configure: (proxy, options) => {
                     proxy.secure = false
                     proxy.agent = null
-                    
+
                 },
             },
             '^/assets/world.json$': {
                 target: 'https://monsterjs.org/',
                 changeOrigin: true,
-                
+
                 configure: (proxy, options) => {
-                 
+
                     proxy.secure = true
                     proxy.agent = null
-                    
+
                 },
             },
 
diff --git a/devenv.nix b/devenv.nix
index efdcb9eacd31888bf492deb76ff66a40773e6468..5ff412813b1be13b0368ef25f47f8761b0387514 100644
--- a/devenv.nix
+++ b/devenv.nix
@@ -11,7 +11,36 @@
     if pkgs.stdenv.system != null
     then pkgs.stdenv.system
     else builtins.currentSystem;
-    
+
+  importJSScript = pkgs.writeTextFile {
+    name = "import.mjs";
+    text = ''
+      // THIS FILE IS AUTOGENERATED. DO NOT EDIT THIS FILE DIRECTLY.
+
+      export const projectRoot = "${config.devenv.root}";
+      export const sourcePath = "${config.devenv.root}/source";
+      export const developmentPath = "${config.devenv.root}/development";
+      export const pnpxBin = "${pkgs.nodePackages.pnpm}/bin/pnpx";
+      export const nodeBin = "${pkgs.nodejs_20}/bin/node";
+      export const license = "/**" +
+                            " * Copyright © schukai GmbH and all contributing authors, {{copyRightYear}}. All rights reserved." + "\n" + 
+                            " * Node module: @schukai/monster" + "\n" + 
+                            " *" + "\n" +  
+                            " * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3)." + "\n" + 
+                            " * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html" + "\n" + 
+                            " *" + "\n" +  
+                            " * For those who do not wish to adhere to the AGPLv3, a commercial license is available." + "\n" + 
+                            " * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms." + "\n" + 
+                            " * For more information about purchasing a commercial license, please contact schukai GmbH." + "\n" + 
+                             " */";
+      
+      
+      ;
+
+
+      // THIS FILE IS AUTOGENERATED. DO NOT EDIT THIS FILE DIRECTLY.
+    '';
+  };
 
   commonFunctionsScript = pkgs.writeScript "common-functions" ''
 
@@ -108,7 +137,6 @@
     fi
 
   '';
-    
 in {
   env.APP_NAME = "monster";
   env.dddd = "@schukai/monster";
@@ -137,6 +165,7 @@ in {
     gnused
     go-task
     gum
+    lightningcss
     httpie
     hurl
     jq
@@ -166,7 +195,6 @@ in {
     };
   };
 
-
   difftastic.enable = false;
 
   enterShell = ''
@@ -189,56 +217,111 @@ in {
   scripts.build-changelog.exec = ''
     ${pkgs.git-chglog}/bin/git-chglog --config ${config.devenv.root}/.chglog/config.yml -o ${config.devenv.root}/CHANGELOG.md
   '';
-  
+
+  scripts.update-files.exec = ''
+    #!${pkgs.bash}/bin/bash
+    source ${commonFunctionsScript}
+
+    echo_section "Update files"
+
+    create_symlink() {
+        if ${pkgs.coreutils}/bin/ln -s "$1" "$2" 2>/dev/null; then
+            echo_ok "$2 created"
+        else
+            echo_fail "$2 already exists"
+        fi
+    }
+
+    update_symlink() {
+        echo_section "Update $1"
+        local source_path="$1"
+        local target_path="$2"
+        local file_name="$(basename "$target_path")"
+        local source_dir="$(dirname "$source_path")"
+        ${pkgs.coreutils}/bin/mkdir -p "$source_dir" || true
+        if [[ ! -d "$source_dir" ]]; then
+            echo_fail "$source_dir is not a directory. Please remove it manually and run the script again."
+            exit 1
+        fi
+
+        if [[ -L "$source_path" ]]; then
+            if [[ "$(readlink "$source_path")" != "$target_path" ]]; then
+                echo_step "Remove old symlink $file_name"
+                ${pkgs.coreutils}/bin/rm "$source_path"
+                echo_step "Create new symlink $file_name"
+                create_symlink "$target_path" "$source_path"
+                echo_ok "$source_path updated$RESET"
+            else
+                echo_ok "$source_path is up to date$RESET"
+            fi
+        elif [[ -e "$source_path" ]]; then
+            echo_fail "$source_path already exists and is not a symlink. Please remove it manually and run the script again."
+            exit 1
+        else
+            create_symlink "$target_path" "$source_path"
+            echo_ok "$source_path created$RESET"
+        fi
+    }
+
+    update_symlink "${config.devenv.root}/development/scripts/import.mjs" "${importJSScript}"
+
+
+  '';
 
   scripts.build-and-publish.exec = ''
+    #!${pkgs.bash}/bin/bash
+    source ${commonFunctionsScript}
     
-    if [ -t 1 ]; then
-      RED='\033[0;31m'
-      GREEN='\033[0;32m'
-      RESET='\033[0m'
-      BOLD='\033[1m'
-    else
-      RED=""
-      GREEN=""
-      RESET=""
-    fi
+    echo_section "Build and publish"
+
+    echo_step "Update auto-generated files"
+    update-files
+    build-stylesheets
+    build-monster-file
 
+    echo_step "Check if git is clean"
     if [[ -n "$(git status --porcelain)" ]]; then
-      echo -e "''${RED}✖ Git is not clean. Exiting.''${RESET}"
-      echo -e "  You must commit all changes before you can publish a new version."
-      exit 1
+        echo_fail "Git is not clean. Exiting."
+        echo_hint "You must commit all changes before you can publish a new version."
+        exit 1
     fi
 
+    echo_step "Get next version"
     NEXTVERSION="$(${inputs.version.defaultPackage."${builtins.currentSystem}"}/bin/version predict --git -0)"
     EXITCODE=$?
     if [ $EXITCODE -ne 0 ]; then
-      echo -e "''${RED}✖ No notable changes found. Exiting.''${RESET}"
-      echo -e "  Check this repository for changes. You must add a new commit with"
-      echo -e "  feat: or fix: in the commit message to trigger a new version."
-      exit 1
+        echo_fail "Version prediction failed. Exiting."
+        echo_hint "You must add a new commit with feat: or fix: in the commit message to trigger a new version."
+        echo_hint "You can also run the version script manually to see the error message."
+        exit 1
     fi
 
-    echo -e "''${GREEN}✔''${RESET} New version: $NEXTVERSION"
-
+    echo_ok "New version: $NEXTVERSION"
+    
+    echo_step "Update package.json and version.mjs"
     LASTVERSION=$(cat "${config.devenv.root}/package.json" | jq -r '.version')
-
     jq ".version = \"$NEXTVERSION\"" "${config.devenv.root}/package.json" | ${pkgs.moreutils}/bin/sponge "${config.devenv.root}/package.json"
     update-versions
+    
+    echo_ok "Package.json and version.mjs updated"
 
     PROJECT_ROOT="${config.devenv.root}/"
     TEST_PATH="${config.devenv.root}/test/"
     BUILD_PATH="${config.devenv.root}/dist/"
 
     if [ -d "$BUILD_PATH" ]; then
-      rm -rf "$BUILD_PATH"
+        echo_step "Remove old build directory"
+        rm -rf "$BUILD_PATH"
     fi
 
+    echo_step "Create new build directory"
     mkdir -p "''${BUILD_PATH}"
 
+    echo_step "Build changelog"
     ${pkgs.git-chglog}/bin/git-chglog --next-tag ''$NEXTVERSION --config "${config.devenv.root}/.chglog/config.yml" \
         -o "${config.devenv.root}/CHANGELOG.md"
 
+    echo_step "Copy files to build directory"
     ${pkgs.rsync}/bin/rsync -a --exclude-from="${config.devenv.root}/.gitignore" "${config.devenv.root}/source" "''${BUILD_PATH}"
     ${pkgs.rsync}/bin/rsync -a --exclude-from="${config.devenv.root}/.gitignore" "${config.devenv.root}/test" "''${BUILD_PATH}"
     ${pkgs.rsync}/bin/rsync -a --exclude-from="${config.devenv.root}/.gitignore" "${config.devenv.root}/example" "''${BUILD_PATH}"
@@ -259,17 +342,23 @@ in {
     fi
 
     cd ''${BUILD_PATH} || exit 1
+    
+    echo_ok "Files copied to build directory"
 
     OPTIONS=""
     if [ ! -f "${config.devenv.root}/.npmrc" ]; then
-      echo -e "''${RED}✖ No .npmrc file found.''${RESET}"
-      echo -e "  If you want to publish to npm, you need to create a .npmrc file in the root of the project."
-      echo -e "  //registry.npmjs.org/:_authToken=$NPM_TOKEN"
-      echo -e "  You can find the token in the npm account settings."
-      echo -e "\n  We run in dry-run mode now."
+      echo_fail "No .npmrc file found."
+      echo_hint "You must create a .npmrc file in the root of the project to publish to npm."
+      echo_hint "You can find the token in the npm account settings."
+      echo_hint "If you want to publish to npm, you need to create a .npmrc file in the root of the project."
+      echo_hint "  //registry.npmjs.org/:_authToken=$NPM_TOKEN"
+      echo_hint "You can find the token in the npm account settings."
+      
+      echo_step "We run in dry-run mode now."
       OPTIONS="--dry-run --no-git-checks"
     fi
 
+    echo_section "Publish to npm"
     pnpm publish $OPTIONS --access public
     exitcode=$?
     cd - || exit 1
@@ -279,20 +368,22 @@ in {
       ## reset to last version
       jq ".version = \"$LASTVERSION\"" "${config.devenv.root}/package.json" | ${pkgs.moreutils}/bin/sponge "${config.devenv.root}/package.json"
       update-versions
-
-      echo -e "''${RED}✖ Publishing failed. Exiting.''${RESET}"
+      echo_fail "Publishing failed. Exiting."
+      echo_step "Reset to last version"
       git reset --hard HEAD~1
-
       exit 1
     fi
 
-    git tag -a ''$NEXTVERSION -m "chore tag new version $NEXTVERSION"
-
-    echo -e "''${GREEN}✔''${RESET} Publishing successful."
-
-
-
+    echo_step "Tag new version"
+    if ! git tag -a ''$NEXTVERSION -m "chore tag new version $NEXTVERSION"
+    then
+      echo_fail "Tag creation failed. Exiting."
+      exit 1
+    fi
+    echo_ok "Tag created"
+    echo_ok "Publish successful"
   '';
+  
   scripts.update-versions.exec = ''
 
     VERSION=$(${pkgs.coreutils}/bin/cat "${config.devenv.root}/package.json" | jq -r '.version')
@@ -320,7 +411,7 @@ in {
         exit 1
     fi
   '';
-   
+
   scripts.run-showroom.exec = ''
 
     if ! ${pkgs.nodePackages.pnpm}/bin/pnpx vite --config "${config.devenv.root}/showroom/vite.config.js"; then
@@ -330,92 +421,91 @@ in {
 
 
   '';
-  
+
   scripts.create-issue.exec = ''
-   #!${pkgs.bash}/bin/bash
-   source ${commonFunctionsScript}
-   
-   echo_section "create new issue"
-   
-   echo_step "enter issue title"
-   issue_text=$(gum input --placeholder "Enter issue title")
-   
-   echo_step "enter issue description (End with Ctrl+D)"
-   issue_description=$(gum write --placeholder "Enter issue description. End with Ctrl+D")
-   
-   if [[ -z "$issue_text" ]]; then
-      log_fail "Issue title is empty. Exiting."
-      exit 1
-   fi
-   
-   escaped_issue_text=$(sed 's/"/\\"/g' <<< "$issue_text")
-   escaped_issue_description=$(sed 's/"/\\"/g' <<< "$issue_description")
-   
-   echo $escaped_issue_text
-   echo $escaped_issue_description
-   
-   issue_output=$(glab issue create -t"$issue_text" --no-editor --description "$issue_description")
-   if [ $? -ne 0 ]; then
-      echo_fail "Issue creation failed. Exiting."
-      exit 1
-   fi
-   issue_id=$(echo "$issue_output" | grep -oP '(?<=/issues/)\d+')
-   if [ -z "$issue_id" ]; then
-      echo_fail "Issue creation failed. Exiting."
-      exit 1
-   fi
-   
-   echo_ok "Issue with id $issue_id created"
-   
-   echo_step "create new issue file in test/cases"
-   issue_dir="${config.devenv.root}/development/issues/open"
-   mkdir -p "$issue_dir"
-   
-   cat <<EOF > $issue_dir/''${issue_id}.mjs
-/**
-* @file development/issues/open/''${issue_id}.mjs
-* @url https://gitlab.schukai.com/oss/libraries/javascript/monster/-/issues/''${issue_id}
-* @description ''${escaped_issue_text}
-* @issue ''${issue_id}
-*/
-
-import "../../../source/components/style/property.pcss";
-import "../../../source/components/style/normalize.pcss";
-import "../../../source/components/style/typography.pcss";
-    
-EOF
-
-    cat <<EOF > $issue_dir/''${issue_id}.html
-<!DOCTYPE html>
-<html lang="en">
-<head>
-  <meta charset="UTF-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  <title>''${escaped_issue_text} #''${issue_id}</title>
-  <script src="./''${issue_id}.mjs" type="module"></script>
-</head>
-<body>
-    <h1>''${escaped_issue_text} #''${issue_id}</h1>
-    <p>''${escaped_issue_description}</p>
-    <ul>
-        <li><a href="https://gitlab.schukai.com/oss/libraries/javascript/monster/-/issues/''${issue_id}">Issue #''${issue_id}</a></li>
-        <li><a href="/">Back to overview</a></li>
-    </ul> 
-    <main>
-          <!-- Write your code here -->    
-    </main>
-      
-</body>
-</html>
-EOF
+       #!${pkgs.bash}/bin/bash
+       source ${commonFunctionsScript}
+
+       echo_section "create new issue"
+
+       echo_step "enter issue title"
+       issue_text=$(gum input --placeholder "Enter issue title")
+
+       echo_step "enter issue description (End with Ctrl+D)"
+       issue_description=$(gum write --placeholder "Enter issue description. End with Ctrl+D")
+
+       if [[ -z "$issue_text" ]]; then
+          log_fail "Issue title is empty. Exiting."
+          exit 1
+       fi
+
+       escaped_issue_text=$(sed 's/"/\\"/g' <<< "$issue_text")
+       escaped_issue_description=$(sed 's/"/\\"/g' <<< "$issue_description")
+
+       echo $escaped_issue_text
+       echo $escaped_issue_description
+
+       issue_output=$(glab issue create -t"$issue_text" --no-editor --description "$issue_description")
+       if [ $? -ne 0 ]; then
+          echo_fail "Issue creation failed. Exiting."
+          exit 1
+       fi
+       issue_id=$(echo "$issue_output" | grep -oP '(?<=/issues/)\d+')
+       if [ -z "$issue_id" ]; then
+          echo_fail "Issue creation failed. Exiting."
+          exit 1
+       fi
+
+       echo_ok "Issue with id $issue_id created"
+
+       echo_step "create new issue file in test/cases"
+       issue_dir="${config.devenv.root}/development/issues/open"
+       mkdir -p "$issue_dir"
+
+       cat <<EOF > $issue_dir/''${issue_id}.mjs
+    /**
+    * @file development/issues/open/''${issue_id}.mjs
+    * @url https://gitlab.schukai.com/oss/libraries/javascript/monster/-/issues/''${issue_id}
+    * @description ''${escaped_issue_text}
+    * @issue ''${issue_id}
+    */
+
+    import "../../../source/components/style/property.pcss";
+    import "../../../source/components/style/normalize.pcss";
+    import "../../../source/components/style/typography.pcss";
+
+    EOF
+
+        cat <<EOF > $issue_dir/''${issue_id}.html
+    <!DOCTYPE html>
+    <html lang="en">
+    <head>
+      <meta charset="UTF-8">
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <title>''${escaped_issue_text} #''${issue_id}</title>
+      <script src="./''${issue_id}.mjs" type="module"></script>
+    </head>
+    <body>
+        <h1>''${escaped_issue_text} #''${issue_id}</h1>
+        <p>''${escaped_issue_description}</p>
+        <ul>
+            <li><a href="https://gitlab.schukai.com/oss/libraries/javascript/monster/-/issues/''${issue_id}">Issue #''${issue_id}</a></li>
+            <li><a href="/">Back to overview</a></li>
+        </ul>
+        <main>
+              <!-- Write your code here -->
+        </main>
+
+    </body>
+    </html>
+    EOF
+
+        echo_ok "Issue file created"
+        echo_hint "You can find the issue file in ''${issue_dir}/''${issue_id}.mjs"
+        echo_hint "You can find the issue html file in ''${issue_dir}/''${issue_id}.html"
+
+  '';
 
-    echo_ok "Issue file created"
-    echo_hint "You can find the issue file in ''${issue_dir}/''${issue_id}.mjs"
-    echo_hint "You can find the issue html file in ''${issue_dir}/''${issue_id}.html" 
-    
-  '';  
-  
-  
   scripts.create-polyfill.exec = ''
 
     TMPFILE=${config.devenv.root}/.devenv/monster.js
@@ -435,39 +525,54 @@ EOF
   '';
 
   scripts.build-stylesheets.exec = ''
+    #!${pkgs.bash}/bin/bash
 
-    components=$(${pkgs.coreutils}/bin/ls -d ${config.devenv.root}/source/components/*/ |  \
-                 ${pkgs.gnused}/bin/sed -E "s|${config.devenv.root}/source/||g" | \
-                 ${pkgs.gnused}/bin/sed -E "s|/$||g" | ${pkgs.gnugrep}/bin/grep -v style )
-    for component in $components; do
-      ${pkgs.nodejs_20}/bin/node ${config.devenv.root}/opt/scripts/build-stylesheets.cjs ${config.devenv.root} --rel-path $component
-    done
+    TEST_PATH="${config.devenv.root}/test"
+    TEST_CASES_PATH="''${TEST_PATH}/cases/"
 
-    ${pkgs.nodejs_20}/bin/node ${config.devenv.root}/opt/scripts/build-stylesheets.cjs ${config.devenv.root} --rel-path "components/"
+    source ${commonFunctionsScript}
+    
+    echo_section "build stylesheets"
+    
+    function build() {
+        source ${commonFunctionsScript}
+        local prefix="${config.devenv.root}/source/"
+        echo_step "build stylesheet ''${1#$prefix}"
+        ${pkgs.nodejs_20}/bin/node ${config.devenv.root}/development/scripts/buildStylesheets.mjs "$1"
+    }
+    
+    export -f build
+    
+    if ! ${pkgs.fd}/bin/fd --absolute-path --full-path ${config.devenv.root}/source --type file --extension pcss -0 | xargs -0 -I {} bash -c 'build "$@"' _ {}; then
+      echo_fail "Stylesheet build failed. Exiting."
+      exit 1
+    fi
+    
+    echo_ok "Stylesheet build successful"
 
 
   '';
-  
+
   scripts.run-tests.exec = ''
     #!${pkgs.bash}/bin/bash
-    
+
     TEST_PATH="${config.devenv.root}/test"
     TEST_CASES_PATH="''${TEST_PATH}/cases/"
-    
+
     source ${commonFunctionsScript}
     update-versions
 
     echo_section "run tests"
 
     selection=$(gum choose "run specific test" "run all tests" "Cancel")
-    
+
     if [[ "$selection" == "Cancel" ]]; then
       echo_text "Exiting."
       exit 0
     fi
-    
+
     if [[ "$selection" == "run all tests" ]]; then
-       echo_step "run specific tests"    
+       echo_step "run specific tests"
        if ! ${pkgs.nodePackages.pnpm}/bin/pnpm mocha --colors --jobs 1 --bail --recursive $TEST_CASES_PATH
        then
           echo "ERROR: Tests failed, check your JS!"
@@ -475,15 +580,15 @@ EOF
        fi
        exit 0
     fi
-    
+
     escaped_test_cases_path=$(printf '%s\n' "$TEST_CASES_PATH" | sed 's:[\\/&]:\\&:g;$!s/$/\\/')
 
-    echo_step "run all tests"    
+    echo_step "run all tests"
     files=$(find $TEST_CASES_PATH -type f -name "*.mjs")
     relative_files=$(echo "$files" | sed "s|''${escaped_test_cases_path}||g")
-    
+
     selected=$(echo "$relative_files" | gum filter --no-limit --header="Select the test case to run" --placeholder="Select test case to run, use tab to select multiple files")
-    
+
     if [[ -z "$selected" ]]; then
       echo_text "No files selected. Exiting."
       exit 0
@@ -495,16 +600,24 @@ EOF
       echo "ERROR: Tests failed, check your JS!"
       exit 1
     fi
-    
-      
-    
+
+
+
   '';
 
-  scripts.build-monster-mjs.exec = ''
-    if ! $(${pkgs.nodejs_20}/bin/node ${config.devenv.root}/opt/scripts/build-exports.cjs) ; then
-      echo "ERROR: build-exports failed, check your JS!"
+  scripts.build-monster-file.exec = ''
+    #!${pkgs.bash}/bin/bash
+    source ${commonFunctionsScript}
+    set -x
+    
+    echo_section "build monster file"
+    
+    if ! $(${pkgs.nodejs_20}/bin/node ${config.devenv.root}/development/scripts/buildMonsterFile.mjs) 
+    then
+      echo "ERROR: script buildMonsterFile.mjs failed, check your JS!"
       exit 1
     fi
+    echo_ok "Monster file created"
   '';
 
   scripts.run-web-tests.exec = ''
@@ -515,8 +628,8 @@ EOF
     VERSION=$(cat "${config.devenv.root}/package.json" | jq -r '.version')
 
     update-versions
-    if ! build-monster-mjs ; then
-      echo "ERROR: build-monster-mjs failed, check your JS!"
+    if ! build-monster-file ; then
+      echo "ERROR: build-monster-file failed, check your JS!"
       exit 1
     fi
     create-polyfill
@@ -527,7 +640,7 @@ EOF
     sed -i "1 i import \"./prepare.js\";"  ''${TEST_PATH}web/import.js
     sed -i "1 i /** this file was created automatically by the run-web-tests script */"  ''${TEST_PATH}web/import.js
 
-    if ! npx esbuild --platform=browser --sourcemap=inline --external:ws --external:jsdom --external:fs --external:process --external:crypto --bundle ''${TEST_PATH}web/import.js --outfile=''${TEST_PATH}web/tests.js 
+    if ! npx esbuild --platform=browser --sourcemap=inline --external:ws --external:jsdom --external:fs --external:process --external:crypto --bundle ''${TEST_PATH}web/import.js --outfile=''${TEST_PATH}web/tests.js
     then
       echo "ERROR: esbuild failed, check your JS!"
       exit 1
@@ -537,7 +650,7 @@ EOF
     echo "} catch (e) {" >> ''${TEST_PATH}web/tests.js
     echo "document.getElementById('mocha-errors').insertAdjacentHTML('afterbegin', e );" >> ''${TEST_PATH}web/tests.js
     echo "document.getElementById('mocha-stats').style.backgroundColor = 'red';" >> ''${TEST_PATH}web/tests.js
-    echo "}" >> ''${TEST_PATH}web/tests.js 
+    echo "}" >> ''${TEST_PATH}web/tests.js
 
     sed -i -E "/<h1/s_.*_  <h1 style='margin-bottom: 0.1em;'>Monster ''${VERSION}</h1>_" ''${TEST_PATH}web/test.html
     sed -i -E "/id=\"lastupdate\"/s_.*_  <div id=\"lastupdate\" style='font-size:0.7em'>last update $(date)</div>_" ''${TEST_PATH}web/test.html
@@ -547,7 +660,6 @@ EOF
     ${pkgs.xdg-utils}/bin/xdg-open ''${TEST_PATH}web/test.html
 
   '';
-  
 
   scripts.publish-doc.exec = ''
     #!${pkgs.bash}/bin/bash
@@ -603,7 +715,7 @@ EOF
   '';
 
   scripts.do-commit.exec = ''
-    #!/usr/bin/env bash
+    #!${pkgs.bash}/bin/bash
 
     # Define colors if the terminal supports it
     if [ -t 1 ]; then
diff --git a/opt/scripts/build-stylesheets.cjs b/opt/scripts/build-stylesheets.cjs
index d63a327b67bb6698b14d8c0c45805b19a707594a..ba7037bb3cd8584969c70e89421e0009853e4f9f 100644
--- a/opt/scripts/build-stylesheets.cjs
+++ b/opt/scripts/build-stylesheets.cjs
@@ -1,251 +1,158 @@
-const fs = require('fs');
-const os = require('os');
-const path = require('path');
-const postcss = require('postcss');
-const cssnano = require('cssnano');
-const normalizeCss = require('postcss-normalize');
-const postcssFluid = require('postcss-fluid');
-const importCss = require('postcss-import');
-const postcssNesting = require('postcss-nesting');
-const postcssFor = require('postcss-for');
-//const postcssRtlcss = require('postcss-rtlcss');
-const autoprefixer = require('autoprefixer');
-const postcssMixins = require('postcss-mixins');
-const postcssStripUnits = require('postcss-strip-units');
-
-const args = process.argv.slice(2);
-
-if (args.length < 1) {
-    console.log("Usage: node build-stylesheets.js <project-root>");
-    process.exit(1);
-}
-
-const projectRoot = args[0];
-
-if (!fs.existsSync(projectRoot)) {
-    console.log("Project root " + projectRoot + " does not exist");
-    process.exit(1);
-}
-
-let relPath = null;
-for (let i = 0; i < args.length; i++) {
-    if (args[i] === '--rel-path') {
-        relPath = args[i + 1];
-    }
-}
-
-if (relPath === null || relPath === undefined || relPath === "") {
-    console.error("Relativ path must be set");
-    console.log("Usage: node build-stylesheets.js --relPath <relativ-path>");
-    process.exit(1);
-}
-
-if (relPath.substr(-1) !== '/') {
-    relPath += '/';
-}
-
-if (relPath.substr(0, 1) === '/') {
-    console.error("Relativ path must not start with /");
-    console.log("Usage: node build-stylesheets.js --relPath <relativ-path>");
-    process.exit(1);
-}
-
-// build rel, return path ../ to root
-let backToRootPath = "";
-const parts = relPath.split("/");
-for (let i = 0; i < parts.length; i++) {
-    backToRootPath += "../";
-}
-
-const absoluteProjectRoot = path.resolve(projectRoot) + "/";
-const absoluteSourcePath = absoluteProjectRoot + 'source/';
-const styleSourceRoot = absoluteSourcePath + relPath + 'style/'
-const styleSheetRoot = absoluteSourcePath + relPath + 'stylesheet/'
-const nodeModuleStyleSourceRoot = absoluteProjectRoot + 'node_modules/'
-
-if (!fs.existsSync(styleSourceRoot)) {
-    console.log("Style source root " + styleSourceRoot + " does not exist");
-    process.exit(1);
-}
-
-if (!fs.existsSync(nodeModuleStyleSourceRoot)) {
-    console.log("Node module style source root " + nodeModuleStyleSourceRoot + " does not exist");
-    process.exit(1);
-}
-
-if (!fs.existsSync(styleSheetRoot)) {
-    fs.mkdirSync(styleSheetRoot);
-}
-
-let promises = [];
-let styles = new Map();
-
-const packageJsonPath = absoluteProjectRoot + 'package.json';
-const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
-const copyRightYear = new Date().getFullYear();
-
-const codeTemplate = `
-/**
- * Copyright schukai GmbH and contributors ${copyRightYear}. All Rights Reserved.
- * Node module: ${packageJson.name}
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
- */
-
-import {addAttributeToken} from "` + backToRootPath + `dom/attributes.mjs";
-import {ATTRIBUTE_ERRORMESSAGE} from "` + backToRootPath + `dom/constants.mjs";
-
-export {{{ClassName}}StyleSheet}
-
-/**
- * @private
- * @type {CSSStyleSheet}
- */
-const {{ClassName}}StyleSheet = new CSSStyleSheet();
-
-try {
-  {{ClassName}}StyleSheet.insertRule(\`
-@layer {{LayerName}} { 
-{{css}} 
-}\`, 0);
-} catch (e) {
-  addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
-}
-`;
-
-
-function scanFiles(root, keyPath) {
-
-    if (keyPath === undefined) {
-        keyPath = [];
-    }
-
-    return new Promise((resolve, reject) => {
-
-        let localPromises = [];
-        let f;
-
-        const dir = fs.opendirSync(root);
-        while ((f = dir.readSync()) !== null) {
-
-            const key = f.name;
-            const fn = path.join(root, f.name);
-            const currentPath = [...keyPath]
-            currentPath.push(key);
-
-            if (f.isDirectory()) {
-
-                if (["node_modules", "mixin"].includes(f.name)) {
-                    continue;
-                }
-
-                localPromises.push(scanFiles(fn, currentPath));
-                continue;
-            } else if (!f.isFile()) {
-                continue;
-            }
-
-            if ((path.extname(f.name) !== ".css" && path.extname(f.name) !== ".pcss")) {
-                continue;
-            }
-
-            //console.log("Found file: " + fn);
-            let content = fs.readFileSync(fn, 'utf8');
-            localPromises.push(rewriteCSS(content, fn, currentPath));
-        }
-
-        dir.closeSync();
-
-        Promise.all(localPromises).then(resolve).catch(reject);
-
-    })
-}
-
-
-function rewriteCSS(content, sourceFile, keyPath) {
-
-    const newPath = path.format({...path.parse(keyPath.join("/")), base: '', ext: '.mjs'})
-
-    return new Promise((resolve, reject) => {
-
-        return postcss([
-            importCss({
-                path: [absoluteSourcePath, nodeModuleStyleSourceRoot, styleSourceRoot],
-                root: absoluteProjectRoot,
-                resolve: (id, basedir, importOptions, astNode) => {
-
-                    firstTry = path.join(basedir, id);
-                    if (fs.existsSync(firstTry)) {
-                        return firstTry;
-                    }
-
-                    const dir = path.dirname(sourceFile);
-                    const fn = path.join(dir, id);
-                    
-                    return fs.realpathSync(fn);
-
-                }
-            }),
-            normalizeCss,
-            postcssMixins,
-            postcssNesting(),
-            postcssFor(),
-            postcssStripUnits({
-                functionName: 'strip-units',
-            }),
-            postcssFluid({
-                // Defaults:
-                min: '320px', // Min media size
-                max: '1800px', // Max media size
-                functionName: 'fluid', // function name, may be anything
-            }), // https://github.com/notiv-nt/postcss-fluid
-            autoprefixer,
-            //postcssRtlcss,
-            cssnano
-        ]).process(content, {
-            from: undefined,
-
-        }).catch((e) => {
-            reject(e + " in file " + sourceFile);
-        }).then(result => {
-
-            if (result === undefined || result.css === undefined) {
-                reject("Error processing file " + sourceFile);
-                return;
-            }
-
-            styles.set(newPath, result.css);
-            resolve();
-
-        }).catch((e) => {
-            console.error(e);
-        });
-    })
-}
-
-scanFiles(path.normalize(styleSourceRoot)).then(() => {
-
-    styles.forEach((css, fn) => {
-
-        let className = path.parse(fn).name;
-        className = className.charAt(0).toUpperCase() + className.slice(1);
-        className = className.replace(/-([a-z])/g, function (g) {
-            return g[1].toUpperCase();
-        });
-        let layerName = className.toLowerCase();
-
-        css = css.replace(/"/g, '\\"');
-        const code = codeTemplate
-            .replaceAll("{{ClassName}}", className)
-            .replaceAll("{{LayerName}}", layerName)
-            .replaceAll("{{css}}", css);
-
-        const targetFile = path.normalize(path.join(styleSheetRoot, fn));
-        fs.mkdirSync(path.dirname(targetFile), {recursive: true});
-        fs.writeFileSync(targetFile, code);
-    })
-
-}).catch(e => {
-    console.log("Error creating stylesheets");
-    console.error(e);
-})
+// const fs = require('fs');
+// const path = require('path');
+// const args = process.argv.slice(2);
+//
+// if (args.length < 1) {
+//     console.log("Usage: node build-stylesheets.js <project-root>");
+//     process.exit(1);
+// }
+//
+// const projectRoot = args[0];
+//
+// if (!fs.existsSync(projectRoot)) {
+//     console.log("Project root " + projectRoot + " does not exist");
+//     process.exit(1);
+// }
+//
+// let relPath = null;
+// for (let i = 0; i < args.length; i++) {
+//     if (args[i] === '--rel-path') {
+//         relPath = args[i + 1];
+//     }
+// }
+//
+// if (relPath === null || relPath === undefined || relPath === "") {
+//     console.error("Relativ path must be set");
+//     console.log("Usage: node build-stylesheets.js --relPath <relativ-path>");
+//     process.exit(1);
+// }
+//
+// if (relPath.substr(-1) !== '/') {
+//     relPath += '/';
+// }
+//
+// if (relPath.substr(0, 1) === '/') {
+//     console.error("Relativ path must not start with /");
+//     console.log("Usage: node build-stylesheets.js --relPath <relativ-path>");
+//     process.exit(1);
+// }
+//
+// // build rel, return path ../ to root
+// let backToRootPath = "";
+// const parts = relPath.split("/");
+// for (let i = 0; i < parts.length; i++) {
+//     backToRootPath += "../";
+// }
+//
+// const absoluteProjectRoot = path.resolve(projectRoot) + "/";
+// const absoluteSourcePath = absoluteProjectRoot + 'source/';
+// const styleSourceRoot = absoluteSourcePath + relPath + 'style/'
+// const styleSheetRoot = absoluteSourcePath + relPath + 'stylesheet/'
+// const nodeModuleStyleSourceRoot = absoluteProjectRoot + 'node_modules/'
+//
+// if (!fs.existsSync(styleSourceRoot)) {
+//     console.log("Style source root " + styleSourceRoot + " does not exist");
+//     process.exit(1);
+// }
+//
+// if (!fs.existsSync(nodeModuleStyleSourceRoot)) {
+//     console.log("Node module style source root " + nodeModuleStyleSourceRoot + " does not exist");
+//     process.exit(1);
+// }
+//
+// if (!fs.existsSync(styleSheetRoot)) {
+//     fs.mkdirSync(styleSheetRoot);
+// }
+//
+// let promises = [];
+// let styles = new Map();
+//
+//
+// export function buildScriptCSS(styleSheetRoot, styles) {
+//     styles.forEach((css, fn) => {
+//
+//         let className = path.parse(fn).name;
+//         className = className.charAt(0).toUpperCase() + className.slice(1);
+//         className = className.replace(/-([a-z])/g, function (g) {
+//             return g[1].toUpperCase();
+//         });
+//         let layerName = className.toLowerCase();
+//
+//         css = css.replace(/"/g, '\\"');
+//         const code = codeTemplate
+//             .replaceAll("{{backToRootPath}}", path.relative(styleSheetRoot, projectRoot) + "/")
+//             .replaceAll("{{copyRightYear}}", new Date().getFullYear())
+//             .replaceAll("{{ClassName}}", className)
+//             .replaceAll("{{LayerName}}", layerName)
+//             .replaceAll("{{css}}", css);
+//
+//         const targetFile = path.normalize(path.join(styleSheetRoot, fn));
+//         fs.mkdirSync(path.dirname(targetFile), {recursive: true});
+//         fs.writeFileSync(targetFile, code);
+//     })
+// }
+//
+//
+// function scanFiles(root, keyPath) {
+//
+//     if (keyPath === undefined) {
+//         keyPath = [];
+//     }
+//
+//     return new Promise((resolve, reject) => {
+//
+//         let localPromises = [];
+//         let f;
+//
+//         const dir = fs.opendirSync(root);
+//         while ((f = dir.readSync()) !== null) {
+//
+//             const key = f.name;
+//             const fn = path.join(root, f.name);
+//             const currentPath = [...keyPath]
+//             currentPath.push(key);
+//
+//             if (f.isDirectory()) {
+//
+//                 if (["node_modules", "mixin"].includes(f.name)) {
+//                     continue;
+//                 }
+//
+//                 localPromises.push(scanFiles(fn, currentPath));
+//                 continue;
+//             } else if (!f.isFile()) {
+//                 continue;
+//             }
+//
+//             if ((path.extname(f.name) !== ".css" && path.extname(f.name) !== ".pcss")) {
+//                 continue;
+//             }
+//
+//             //console.log("Found file: " + fn);
+//             let content = fs.readFileSync(fn, 'utf8');
+//             localPromises.push(new Promise((resolve, reject) => {
+//                 (async () => {
+//                     const {rewriteCSS} = await import('./rewriteCSS.mjs');
+//                     resolve(rewriteCSS(styles, content, fn, currentPath, absoluteSourcePath, nodeModuleStyleSourceRoot, styleSourceRoot, absoluteProjectRoot));
+//
+//                 })();
+//             }));
+//
+//         }
+//
+//         dir.closeSync();
+//
+//         Promise.all(localPromises).then(resolve).catch(reject);
+//
+//     })
+// }
+//
+//
+// scanFiles(path.normalize(styleSourceRoot)).then(() => {
+//
+//     buildScriptCSS(styleSheetRoot, styles);
+//
+// }).catch(e => {
+//     console.log("Error creating stylesheets");
+//     console.error(e);
+// })
diff --git a/package.json b/package.json
index f0f0e966adb9098d399dd6510178e74359afb9e3..9bdf49856f65f37afc124ab41d47b6995ed67759 100644
--- a/package.json
+++ b/package.json
@@ -48,6 +48,7 @@
     "@biomejs/biome": "1.3.3",
     "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
     "@peculiar/webcrypto": "^1.4.6",
+    "@roarr/cli": "^5.12.4",
     "autoprefixer": "^10.4.19",
     "browserslist": "^4.23.0",
     "btoa": "^1.2.1",
@@ -89,6 +90,7 @@
     "postcss-strip-units": "^2.0.1",
     "puppeteer": "^21.11.0",
     "sinon": "^17.0.1",
+    "turbowatch": "^2.29.4",
     "url": "^0.11.3",
     "url-exist": "3.0.1",
     "util": "^0.12.5",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 5b008bbbc5464736db6bd0168425c77f5efa343b..fcf377e7f43c899f3c1da5361acd491fe0a5c0f7 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -25,6 +25,9 @@ devDependencies:
   '@peculiar/webcrypto':
     specifier: ^1.4.6
     version: 1.4.6
+  '@roarr/cli':
+    specifier: ^5.12.4
+    version: 5.12.4
   autoprefixer:
     specifier: ^10.4.19
     version: 10.4.19(postcss@8.4.38)
@@ -148,6 +151,9 @@ devDependencies:
   sinon:
     specifier: ^17.0.1
     version: 17.0.1
+  turbowatch:
+    specifier: ^2.29.4
+    version: 2.29.4
   url:
     specifier: ^0.11.3
     version: 0.11.3
@@ -1298,6 +1304,29 @@ packages:
       - supports-color
     dev: true
 
+  /@roarr/cli@5.12.4:
+    resolution: {integrity: sha512-XvH6UvwMjP0inpu+R7mRDb+JCGas5xamZ+vJP7A4OlwJtm4phLKG7BY7CQf/IuVjOWjujsh3/qLesFkS6SZslA==}
+    engines: {node: '>=16'}
+    hasBin: true
+    dependencies:
+      chalk: 4.1.2
+      dot-prop: 6.0.1
+      es6-error: 4.1.1
+      liqe: 3.8.0
+      pretty-ms: 7.0.1
+      prettyjson: 1.2.5
+      roarr: 7.21.1
+      seq-logging: 2.2.0
+      socket.io-client: 4.7.5
+      split2: 4.2.0
+      yargs: 17.7.2
+    transitivePeerDependencies:
+      - bufferutil
+      - encoding
+      - supports-color
+      - utf-8-validate
+    dev: true
+
   /@rollup/plugin-strip@3.0.4:
     resolution: {integrity: sha512-LDRV49ZaavxUo2YoKKMQjCxzCxugu1rCPQa0lDYBOWLj6vtzBMr8DcoJjsmg+s450RbKbe3qI9ZLaSO+O1oNbg==}
     engines: {node: '>=14.0.0'}
@@ -1566,6 +1595,10 @@ packages:
     resolution: {integrity: sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==}
     dev: true
 
+  /@socket.io/component-emitter@3.1.0:
+    resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==}
+    dev: true
+
   /@tootallnate/once@2.0.0:
     resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
     engines: {node: '>= 10'}
@@ -1596,6 +1629,13 @@ packages:
   /@types/estree@1.0.5:
     resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
 
+  /@types/fs-extra@11.0.4:
+    resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
+    dependencies:
+      '@types/jsonfile': 6.1.4
+      '@types/node': 20.12.2
+    dev: true
+
   /@types/istanbul-lib-coverage@2.0.6:
     resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
     dev: true
@@ -1604,6 +1644,12 @@ packages:
     resolution: {integrity: sha512-jOk52a1Kz+1oU5fNWwAcNe64/GsE7r/Q6ronwDox0D3ETo/cr4ICMQyeXrj7G6FPW1n8YjRoAZA2F0XBr6GicQ==}
     dev: true
 
+  /@types/jsonfile@6.1.4:
+    resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
+    dependencies:
+      '@types/node': 20.12.2
+    dev: true
+
   /@types/linkify-it@3.0.5:
     resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==}
     dev: true
@@ -1619,6 +1665,10 @@ packages:
     resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==}
     dev: true
 
+  /@types/minimist@1.2.5:
+    resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==}
+    dev: true
+
   /@types/mockjs@1.0.10:
     resolution: {integrity: sha512-SXgrhajHG7boLv6oU93CcmdDm0HYRiceuz6b+7z+/2lCJPTWDv0V5YiwFHT2ejE4bQqgSXQiVPQYPWv7LGsK1g==}
     dev: true
@@ -1635,6 +1685,14 @@ packages:
       undici-types: 5.26.5
     dev: true
 
+  /@types/ps-tree@1.1.6:
+    resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==}
+    dev: true
+
+  /@types/which@3.0.3:
+    resolution: {integrity: sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==}
+    dev: true
+
   /@types/yauzl@2.10.3:
     resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
     requiresBuild: true
@@ -2197,6 +2255,11 @@ packages:
       supports-color: 7.2.0
     dev: true
 
+  /chalk@5.3.0:
+    resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+    engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+    dev: true
+
   /check-error@1.0.3:
     resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
     dependencies:
@@ -2378,6 +2441,11 @@ packages:
     engines: {node: '>=0.1.90'}
     dev: true
 
+  /colors@1.4.0:
+    resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==}
+    engines: {node: '>=0.1.90'}
+    dev: true
+
   /combined-stream@1.0.8:
     resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
     engines: {node: '>= 0.8'}
@@ -2399,6 +2467,11 @@ packages:
     resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
     dev: true
 
+  /commander@5.1.0:
+    resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==}
+    engines: {node: '>= 6'}
+    dev: true
+
   /commander@7.2.0:
     resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
     engines: {node: '>= 10'}
@@ -2794,6 +2867,17 @@ packages:
     engines: {node: '>=0.3.1'}
     dev: true
 
+  /dir-glob@3.0.1:
+    resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+    engines: {node: '>=8'}
+    dependencies:
+      path-type: 4.0.0
+    dev: true
+
+  /discontinuous-range@1.0.0:
+    resolution: {integrity: sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==}
+    dev: true
+
   /doctrine@2.1.0:
     resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
     engines: {node: '>=0.10.0'}
@@ -2884,6 +2968,17 @@ packages:
       tslib: 2.6.2
     dev: true
 
+  /dot-prop@6.0.1:
+    resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==}
+    engines: {node: '>=10'}
+    dependencies:
+      is-obj: 2.0.0
+    dev: true
+
+  /duplexer@0.1.2:
+    resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
+    dev: true
+
   /eastasianwidth@0.2.0:
     resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
     dev: true
@@ -2932,6 +3027,25 @@ packages:
       once: 1.4.0
     dev: true
 
+  /engine.io-client@6.5.3:
+    resolution: {integrity: sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==}
+    dependencies:
+      '@socket.io/component-emitter': 3.1.0
+      debug: 4.3.4(supports-color@8.1.1)
+      engine.io-parser: 5.2.2
+      ws: 8.11.0
+      xmlhttprequest-ssl: 2.0.0
+    transitivePeerDependencies:
+      - bufferutil
+      - supports-color
+      - utf-8-validate
+    dev: true
+
+  /engine.io-parser@5.2.2:
+    resolution: {integrity: sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==}
+    engines: {node: '>=10.0.0'}
+    dev: true
+
   /entities@1.0.0:
     resolution: {integrity: sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==}
     dev: true
@@ -3254,6 +3368,18 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: true
 
+  /event-stream@3.3.4:
+    resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==}
+    dependencies:
+      duplexer: 0.1.2
+      from: 0.1.7
+      map-stream: 0.1.0
+      pause-stream: 0.0.11
+      split: 0.3.3
+      stream-combiner: 0.0.4
+      through: 2.3.8
+    dev: true
+
   /event-target-shim@5.0.1:
     resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
     engines: {node: '>=6'}
@@ -3332,6 +3458,13 @@ packages:
     dev: true
     optional: true
 
+  /fast-printf@1.6.9:
+    resolution: {integrity: sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg==}
+    engines: {node: '>=10.0'}
+    dependencies:
+      boolean: 3.2.0
+    dev: true
+
   /fastq@1.17.1:
     resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
     dependencies:
@@ -3374,6 +3507,17 @@ packages:
       - supports-color
     dev: true
 
+  /find-process@1.4.7:
+    resolution: {integrity: sha512-/U4CYp1214Xrp3u3Fqr9yNynUrr5Le4y0SsJh2lMDDSbpwYSz3M2SMWQC+wqcx79cN8PQtHQIL8KnuY9M66fdg==}
+    hasBin: true
+    dependencies:
+      chalk: 4.1.2
+      commander: 5.1.0
+      debug: 4.3.4(supports-color@8.1.1)
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /find-up@3.0.0:
     resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
     engines: {node: '>=6'}
@@ -3472,6 +3616,10 @@ packages:
       readable-stream: 2.3.8
     dev: true
 
+  /from@0.1.7:
+    resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==}
+    dev: true
+
   /fs-extra@1.0.0:
     resolution: {integrity: sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==}
     dependencies:
@@ -3544,6 +3692,11 @@ packages:
     resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
     dev: true
 
+  /fx@34.0.0:
+    resolution: {integrity: sha512-/fZih3/WLsrtlaj2mahjWxAmyuikmcl3D5kKPqLtFmEilLsy9wp0+/vEmfvYXXhwJc+ajtCFDCf+yttXmPMHSQ==}
+    hasBin: true
+    dev: true
+
   /gensync@1.0.0-beta.2:
     resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
     engines: {node: '>=6.9.0'}
@@ -3647,6 +3800,16 @@ packages:
       once: 1.4.0
     dev: true
 
+  /glob@9.3.5:
+    resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==}
+    engines: {node: '>=16 || 14 >=14.17'}
+    dependencies:
+      fs.realpath: 1.0.0
+      minimatch: 8.0.4
+      minipass: 4.2.8
+      path-scurry: 1.10.2
+    dev: true
+
   /global-agent@3.0.0:
     resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==}
     engines: {node: '>=10.0'}
@@ -3676,6 +3839,17 @@ packages:
       define-properties: 1.2.1
     dev: true
 
+  /globby@13.2.2:
+    resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==}
+    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+    dependencies:
+      dir-glob: 3.0.1
+      fast-glob: 3.3.2
+      ignore: 5.3.1
+      merge2: 1.4.1
+      slash: 4.0.0
+    dev: true
+
   /gopd@1.0.1:
     resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
     dependencies:
@@ -3903,6 +4077,11 @@ packages:
     resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
     dev: true
 
+  /ignore@5.3.1:
+    resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
+    engines: {node: '>= 4'}
+    dev: true
+
   /import-fresh@3.3.0:
     resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
     engines: {node: '>=6'}
@@ -4010,6 +4189,11 @@ packages:
     engines: {node: '>=0.12.0'}
     dev: true
 
+  /is-obj@2.0.0:
+    resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
+    engines: {node: '>=8'}
+    dev: true
+
   /is-plain-obj@2.1.0:
     resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
     engines: {node: '>=8'}
@@ -4096,6 +4280,11 @@ packages:
       '@pkgjs/parseargs': 0.11.0
     dev: true
 
+  /jiti@1.21.0:
+    resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==}
+    hasBin: true
+    dev: true
+
   /jju@1.4.0:
     resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==}
     dev: true
@@ -4382,6 +4571,14 @@ packages:
       uc.micro: 1.0.6
     dev: true
 
+  /liqe@3.8.0:
+    resolution: {integrity: sha512-cZ1rDx4XzxONBTskSPBp7/KwJ9qbUdF8EPnY4VjKXwHF1Krz9lgnlMTh1G7kd+KtPYvUte1mhuZeQSnk7KiSBg==}
+    engines: {node: '>=12.0'}
+    dependencies:
+      nearley: 2.20.1
+      ts-error: 1.0.6
+    dev: true
+
   /load-tsconfig@0.2.5:
     resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -4540,6 +4737,10 @@ packages:
       semver: 7.6.0
     dev: true
 
+  /map-stream@0.1.0:
+    resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==}
+    dev: true
+
   /markdown-it-anchor@8.6.7(@types/markdown-it@12.2.3)(markdown-it@12.3.2):
     resolution: {integrity: sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==}
     peerDependencies:
@@ -4652,6 +4853,13 @@ packages:
       brace-expansion: 2.0.1
     dev: true
 
+  /minimatch@8.0.4:
+    resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==}
+    engines: {node: '>=16 || 14 >=14.17'}
+    dependencies:
+      brace-expansion: 2.0.1
+    dev: true
+
   /minimatch@9.0.4:
     resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==}
     engines: {node: '>=16 || 14 >=14.17'}
@@ -4667,6 +4875,11 @@ packages:
     resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
     dev: true
 
+  /minipass@4.2.8:
+    resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==}
+    engines: {node: '>=8'}
+    dev: true
+
   /minipass@7.0.4:
     resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==}
     engines: {node: '>=16 || 14 >=14.17'}
@@ -4726,6 +4939,10 @@ packages:
       commander: 12.0.0
     dev: true
 
+  /moo@0.5.2:
+    resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==}
+    dev: true
+
   /mrmime@2.0.0:
     resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
     engines: {node: '>=10'}
@@ -4748,6 +4965,16 @@ packages:
     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
     hasBin: true
 
+  /nearley@2.20.1:
+    resolution: {integrity: sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==}
+    hasBin: true
+    dependencies:
+      commander: 2.20.3
+      moo: 0.5.2
+      railroad-diagrams: 1.0.0
+      randexp: 0.4.6
+    dev: true
+
   /netmask@2.0.2:
     resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==}
     engines: {node: '>= 0.4.0'}
@@ -4787,6 +5014,15 @@ packages:
       whatwg-url: 5.0.0
     dev: true
 
+  /node-fetch@3.3.1:
+    resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==}
+    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+    dependencies:
+      data-uri-to-buffer: 4.0.1
+      fetch-blob: 3.2.0
+      formdata-polyfill: 4.0.10
+    dev: true
+
   /node-fetch@3.3.2:
     resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -5010,6 +5246,11 @@ packages:
       lines-and-columns: 1.2.4
     dev: true
 
+  /parse-ms@2.1.0:
+    resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==}
+    engines: {node: '>=6'}
+    dev: true
+
   /parse5@1.5.1:
     resolution: {integrity: sha512-w2jx/0tJzvgKwZa58sj2vAYq/S/K1QJfIB3cWYea/Iu1scFPDQQ3IQiVZTHWtRBwAjv2Yd7S/xeZf3XqLDb3bA==}
     requiresBuild: true
@@ -5085,10 +5326,21 @@ packages:
     resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==}
     dev: true
 
+  /path-type@4.0.0:
+    resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+    engines: {node: '>=8'}
+    dev: true
+
   /pathval@1.1.1:
     resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
     dev: true
 
+  /pause-stream@0.0.11:
+    resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==}
+    dependencies:
+      through: 2.3.8
+    dev: true
+
   /pend@1.2.0:
     resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
     dev: true
@@ -5106,6 +5358,12 @@ packages:
     resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
     engines: {node: '>=8.6'}
 
+  /pidtree@0.6.0:
+    resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
+    engines: {node: '>=0.10'}
+    hasBin: true
+    dev: true
+
   /pify@2.3.0:
     resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
     engines: {node: '>=0.10.0'}
@@ -5615,6 +5873,21 @@ packages:
     engines: {node: ^14.13.1 || >=16.0.0}
     dev: false
 
+  /pretty-ms@7.0.1:
+    resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==}
+    engines: {node: '>=10'}
+    dependencies:
+      parse-ms: 2.1.0
+    dev: true
+
+  /prettyjson@1.2.5:
+    resolution: {integrity: sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==}
+    hasBin: true
+    dependencies:
+      colors: 1.4.0
+      minimist: 1.2.8
+    dev: true
+
   /process-nextick-args@2.0.1:
     resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
     dev: true
@@ -5648,6 +5921,14 @@ packages:
     resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
     dev: true
 
+  /ps-tree@1.2.0:
+    resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==}
+    engines: {node: '>= 0.10'}
+    hasBin: true
+    dependencies:
+      event-stream: 3.3.4
+    dev: true
+
   /psl@1.9.0:
     resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
     dev: true
@@ -5739,12 +6020,28 @@ packages:
     resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==}
     dev: true
 
+  /railroad-diagrams@1.0.0:
+    resolution: {integrity: sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==}
+    dev: true
+
+  /randexp@0.4.6:
+    resolution: {integrity: sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==}
+    engines: {node: '>=0.12'}
+    dependencies:
+      discontinuous-range: 1.0.0
+      ret: 0.1.15
+    dev: true
+
   /randombytes@2.1.0:
     resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
     dependencies:
       safe-buffer: 5.2.1
     dev: true
 
+  /randomcolor@0.6.2:
+    resolution: {integrity: sha512-Mn6TbyYpFgwFuQ8KJKqf3bqqY9O1y37/0jgSK/61PUxV4QfIMv0+K2ioq8DfOjkBslcjwSzRfIDEXfzA9aCx7A==}
+    dev: true
+
   /read-cache@1.0.0:
     resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
     dependencies:
@@ -5887,6 +6184,11 @@ packages:
       supports-preserve-symlinks-flag: 1.0.0
     dev: true
 
+  /ret@0.1.15:
+    resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==}
+    engines: {node: '>=0.12'}
+    dev: true
+
   /reusify@1.0.4:
     resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
     engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
@@ -5911,6 +6213,15 @@ packages:
       sprintf-js: 1.1.3
     dev: true
 
+  /roarr@7.21.1:
+    resolution: {integrity: sha512-3niqt5bXFY1InKU8HKWqqYTYjtrBaxBMnXELXCXUYgtNYGUtZM5rB46HIC430AyacL95iEniGf7RgqsesykLmQ==}
+    engines: {node: '>=18.0'}
+    dependencies:
+      fast-printf: 1.6.9
+      safe-stable-stringify: 2.4.3
+      semver-compare: 1.0.0
+    dev: true
+
   /rollup-plugin-inject@3.0.2:
     resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==}
     deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.
@@ -5993,6 +6304,11 @@ packages:
     resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
     dev: true
 
+  /safe-stable-stringify@2.4.3:
+    resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==}
+    engines: {node: '>=10'}
+    dev: true
+
   /safer-buffer@2.1.2:
     resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
     dev: true
@@ -6039,6 +6355,23 @@ packages:
       lru-cache: 6.0.0
     dev: true
 
+  /seq-logging@2.2.0:
+    resolution: {integrity: sha512-2dzK9Ma6iK45lb1FoqokzFGR7v3HaF4mKuGtLeQ0991fQif7SatFxuLFw/bYNzq+Fe4y4hYfFy/02Qb61itfUw==}
+    engines: {node: '>=14.18'}
+    dependencies:
+      abort-controller: 3.0.0
+      node-fetch: 2.7.0
+    transitivePeerDependencies:
+      - encoding
+    dev: true
+
+  /serialize-error@11.0.3:
+    resolution: {integrity: sha512-2G2y++21dhj2R7iHAdd0FIzjGwuKZld+7Pl/bTU6YIkrC2ZMbVUjm+luj6A6V34Rv9XfKJDKpTWu9W4Gse1D9g==}
+    engines: {node: '>=14.16'}
+    dependencies:
+      type-fest: 2.19.0
+    dev: true
+
   /serialize-error@7.0.1:
     resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==}
     engines: {node: '>=10'}
@@ -6126,6 +6459,11 @@ packages:
       totalist: 3.0.1
     dev: true
 
+  /slash@4.0.0:
+    resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
+    engines: {node: '>=12'}
+    dev: true
+
   /smart-buffer@4.2.0:
     resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
     engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
@@ -6141,6 +6479,30 @@ packages:
       global-agent: 3.0.0
     dev: true
 
+  /socket.io-client@4.7.5:
+    resolution: {integrity: sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==}
+    engines: {node: '>=10.0.0'}
+    dependencies:
+      '@socket.io/component-emitter': 3.1.0
+      debug: 4.3.4(supports-color@8.1.1)
+      engine.io-client: 6.5.3
+      socket.io-parser: 4.2.4
+    transitivePeerDependencies:
+      - bufferutil
+      - supports-color
+      - utf-8-validate
+    dev: true
+
+  /socket.io-parser@4.2.4:
+    resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==}
+    engines: {node: '>=10.0.0'}
+    dependencies:
+      '@socket.io/component-emitter': 3.1.0
+      debug: 4.3.4(supports-color@8.1.1)
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /socks-proxy-agent@8.0.3:
     resolution: {integrity: sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==}
     engines: {node: '>= 14'}
@@ -6186,6 +6548,17 @@ packages:
     deprecated: Please use @jridgewell/sourcemap-codec instead
     dev: true
 
+  /split2@4.2.0:
+    resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
+    engines: {node: '>= 10.x'}
+    dev: true
+
+  /split@0.3.3:
+    resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==}
+    dependencies:
+      through: 2.3.8
+    dev: true
+
   /sprintf-js@1.0.3:
     resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
     dev: true
@@ -6217,6 +6590,12 @@ packages:
     engines: {node: '>= 0.6'}
     dev: true
 
+  /stream-combiner@0.0.4:
+    resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==}
+    dependencies:
+      duplexer: 0.1.2
+    dev: true
+
   /stream-from-promise@1.0.0:
     resolution: {integrity: sha512-j84KLkudt+gr8KJ21RB02btPLx61uGbrLnewsWz6QKmsz8/c4ZFqXw6mJh5+G4oRN7DgDxdbjPxnpySpg1mUig==}
     engines: {node: '>=0.10.0'}
@@ -6448,6 +6827,11 @@ packages:
       minimatch: 3.1.2
     dev: true
 
+  /throttle-debounce@5.0.0:
+    resolution: {integrity: sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==}
+    engines: {node: '>=12.22'}
+    dev: true
+
   /through@2.3.8:
     resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
     dev: true
@@ -6515,6 +6899,15 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: true
 
+  /ts-custom-error@3.3.1:
+    resolution: {integrity: sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==}
+    engines: {node: '>=14.0.0'}
+    dev: true
+
+  /ts-error@1.0.6:
+    resolution: {integrity: sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA==}
+    dev: true
+
   /ts-morph@17.0.1:
     resolution: {integrity: sha512-10PkHyXmrtsTvZSL+cqtJLTgFXkU43Gd0JCc0Rw6GchWbqKe0Rwgt1v3ouobTZwQzF1mGhDeAlWYBMGRV7y+3g==}
     dependencies:
@@ -6534,6 +6927,30 @@ packages:
     dev: true
     optional: true
 
+  /turbowatch@2.29.4:
+    resolution: {integrity: sha512-cdfH1nzLfduhE5iVCAnojtoTzPwNva/TBDrMJBI4Y8SBjBDjMBj2rQqLGqT7qkVk+xDnJrMxgP4c5+Z/GGVFsA==}
+    engines: {node: '>=18'}
+    hasBin: true
+    dependencies:
+      chalk: 4.1.2
+      chokidar: 3.6.0
+      find-process: 1.4.7
+      glob: 9.3.5
+      jiti: 1.21.0
+      micromatch: 4.0.5
+      pidtree: 0.6.0
+      randomcolor: 0.6.2
+      roarr: 7.21.1
+      semver: 7.6.0
+      serialize-error: 11.0.3
+      throttle-debounce: 5.0.0
+      ts-custom-error: 3.3.1
+      yargs: 17.7.2
+      zx: 7.2.3
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
   /tweetnacl@0.14.5:
     resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==}
     requiresBuild: true
@@ -6559,6 +6976,11 @@ packages:
     engines: {node: '>=10'}
     dev: true
 
+  /type-fest@2.19.0:
+    resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
+    engines: {node: '>=12.20'}
+    dev: true
+
   /typescript@5.4.2:
     resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==}
     engines: {node: '>=14.17'}
@@ -6922,6 +7344,11 @@ packages:
     engines: {node: '>=12'}
     dev: true
 
+  /webpod@0.0.2:
+    resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==}
+    hasBin: true
+    dev: true
+
   /whatwg-encoding@2.0.0:
     resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==}
     engines: {node: '>=12'}
@@ -6980,6 +7407,14 @@ packages:
       isexe: 2.0.0
     dev: true
 
+  /which@3.0.1:
+    resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+    hasBin: true
+    dependencies:
+      isexe: 2.0.0
+    dev: true
+
   /word-wrap@1.2.5:
     resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
     engines: {node: '>=0.10.0'}
@@ -7022,6 +7457,19 @@ packages:
     resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
     dev: true
 
+  /ws@8.11.0:
+    resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==}
+    engines: {node: '>=10.0.0'}
+    peerDependencies:
+      bufferutil: ^4.0.1
+      utf-8-validate: ^5.0.2
+    peerDependenciesMeta:
+      bufferutil:
+        optional: true
+      utf-8-validate:
+        optional: true
+    dev: true
+
   /ws@8.16.0:
     resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==}
     engines: {node: '>=10.0.0'}
@@ -7054,6 +7502,11 @@ packages:
     resolution: {integrity: sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==}
     dev: true
 
+  /xmlhttprequest-ssl@2.0.0:
+    resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==}
+    engines: {node: '>=0.4.0'}
+    dev: true
+
   /y18n@4.0.3:
     resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
     dev: true
@@ -7169,6 +7622,28 @@ packages:
       commander: 9.5.0
     dev: true
 
+  /zx@7.2.3:
+    resolution: {integrity: sha512-QODu38nLlYXg/B/Gw7ZKiZrvPkEsjPN3LQ5JFXM7h0JvwhEdPNNl+4Ao1y4+o3CLNiDUNcwzQYZ4/Ko7kKzCMA==}
+    engines: {node: '>= 16.0.0'}
+    hasBin: true
+    dependencies:
+      '@types/fs-extra': 11.0.4
+      '@types/minimist': 1.2.5
+      '@types/node': 18.19.28
+      '@types/ps-tree': 1.1.6
+      '@types/which': 3.0.3
+      chalk: 5.3.0
+      fs-extra: 11.2.0
+      fx: 34.0.0
+      globby: 13.2.2
+      minimist: 1.2.8
+      node-fetch: 3.3.1
+      ps-tree: 1.2.0
+      webpod: 0.0.2
+      which: 3.0.1
+      yaml: 2.4.1
+    dev: true
+
   github.com/volker-schukai/jsdoc-external-example/e039186b531487bd1b1d5e2e1586a396b910c9d9:
     resolution: {tarball: https://codeload.github.com/volker-schukai/jsdoc-external-example/tar.gz/e039186b531487bd1b1d5e2e1586a396b910c9d9}
     name: jsdoc-external-example
diff --git a/source/components/datatable/stylesheet/change-button.mjs b/source/components/datatable/stylesheet/change-button.mjs
index 470db1c5d0ed3bd49b54ff4302a61b331fa87374..7d942c781f9ce60ab29bccf07fe4cae8faf2152e 100644
--- a/source/components/datatable/stylesheet/change-button.mjs
+++ b/source/components/datatable/stylesheet/change-button.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/datatable/stylesheet/column-bar.mjs b/source/components/datatable/stylesheet/column-bar.mjs
index 24676c81434b9b5ac6b62cea023888133fce7994..158a88a8c3238e726324f900dd7ed515794de668 100644
--- a/source/components/datatable/stylesheet/column-bar.mjs
+++ b/source/components/datatable/stylesheet/column-bar.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/datatable/stylesheet/dataset.mjs b/source/components/datatable/stylesheet/dataset.mjs
index 811e93a4752c60a7e44e7338949081e98d2f652b..e040c34ab5a027fa2ee0e2675c0b3cc3b3f57ddb 100644
--- a/source/components/datatable/stylesheet/dataset.mjs
+++ b/source/components/datatable/stylesheet/dataset.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/datatable/stylesheet/datasource.mjs b/source/components/datatable/stylesheet/datasource.mjs
index 6cf5383601b0d8304773e5ad5031e55b3699a7df..97d8085d6e9f07ae2b24ae99a2141b8f4aefa481 100644
--- a/source/components/datatable/stylesheet/datasource.mjs
+++ b/source/components/datatable/stylesheet/datasource.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/datatable/stylesheet/datatable.mjs b/source/components/datatable/stylesheet/datatable.mjs
index 9c1f167ca0e9786e7da2aa38002fd5c7ec98c49b..c98a66bc5439988701d3d12c7bbb36861bda92e5 100644
--- a/source/components/datatable/stylesheet/datatable.mjs
+++ b/source/components/datatable/stylesheet/datatable.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/datatable/stylesheet/embedded-pagination.mjs b/source/components/datatable/stylesheet/embedded-pagination.mjs
index 08f2cfd3cb85c256774b423ffd91f618236cb341..a325f815e8d80349fbd936248737d6726af7ccc5 100644
--- a/source/components/datatable/stylesheet/embedded-pagination.mjs
+++ b/source/components/datatable/stylesheet/embedded-pagination.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/datatable/stylesheet/filter-button.mjs b/source/components/datatable/stylesheet/filter-button.mjs
index e6491f043c5daa87bcd0e458943b77b08c87e986..09c3a6dc057bcc17d946a7eb783a371826e8a8ce 100644
--- a/source/components/datatable/stylesheet/filter-button.mjs
+++ b/source/components/datatable/stylesheet/filter-button.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/datatable/stylesheet/filter-controls-defaults.mjs b/source/components/datatable/stylesheet/filter-controls-defaults.mjs
index 3e283957ef947f24ddbf1017241110b66e9448bb..eb9ce3cc3067ce3a9d8729c0a38d6830be484ff9 100644
--- a/source/components/datatable/stylesheet/filter-controls-defaults.mjs
+++ b/source/components/datatable/stylesheet/filter-controls-defaults.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/datatable/stylesheet/filter-date-range.mjs b/source/components/datatable/stylesheet/filter-date-range.mjs
index 2bc0eaff7d6a40d9b2ff64baf7001e3f0343fc6f..75f7c37a3d87a00b95feff2dfd24ad5d177f90b6 100644
--- a/source/components/datatable/stylesheet/filter-date-range.mjs
+++ b/source/components/datatable/stylesheet/filter-date-range.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/datatable/stylesheet/filter-range.mjs b/source/components/datatable/stylesheet/filter-range.mjs
index 4ca811130e2c964ace2ced0b4350511f6cc3ffe8..1402f6ea9aa6b5d71327c2c34fe53b67e9946bbe 100644
--- a/source/components/datatable/stylesheet/filter-range.mjs
+++ b/source/components/datatable/stylesheet/filter-range.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/datatable/stylesheet/filter.mjs b/source/components/datatable/stylesheet/filter.mjs
index 5081f2eefa9de90571a350fca75f2c0125005b61..693df10aa7381d4dbd8d0a7061b989dbece43786 100644
--- a/source/components/datatable/stylesheet/filter.mjs
+++ b/source/components/datatable/stylesheet/filter.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/datatable/stylesheet/pagination.mjs b/source/components/datatable/stylesheet/pagination.mjs
index 403b623762e0551e4ca157eab31f2f3934437635..a1dfc04f277c5a1e302f0c595988084d953023fa 100644
--- a/source/components/datatable/stylesheet/pagination.mjs
+++ b/source/components/datatable/stylesheet/pagination.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/datatable/stylesheet/save-button.mjs b/source/components/datatable/stylesheet/save-button.mjs
index 292b05af3e810db40fa7fe57e27235283c031352..44eecdf2ebedcb37c368290bad461e65551ddfc1 100644
--- a/source/components/datatable/stylesheet/save-button.mjs
+++ b/source/components/datatable/stylesheet/save-button.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/datatable/stylesheet/select-filter.mjs b/source/components/datatable/stylesheet/select-filter.mjs
index d2b61cb19da486fbfbc76db64962a3769777bd81..fb993b34aa5e8c9c2d2209a1cbfa5b2af6b385df 100644
--- a/source/components/datatable/stylesheet/select-filter.mjs
+++ b/source/components/datatable/stylesheet/select-filter.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/datatable/stylesheet/status.mjs b/source/components/datatable/stylesheet/status.mjs
index ede2bb05c07d9f4cf82566c9bc9f8d6b8a7c85bc..9e5b74e127f08dde7a9b7b7322e735c3bd3bfc5b 100644
--- a/source/components/datatable/stylesheet/status.mjs
+++ b/source/components/datatable/stylesheet/status.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/form/stylesheet/action-button.mjs b/source/components/form/stylesheet/action-button.mjs
index 2e31018d7fe38e99516c3763da4bc7ef61ddff76..2f4431a4a1ed5c8a32b6ef3bd66e1cfb822f02a5 100644
--- a/source/components/form/stylesheet/action-button.mjs
+++ b/source/components/form/stylesheet/action-button.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/form/stylesheet/api-button.mjs b/source/components/form/stylesheet/api-button.mjs
index a22930ce51f1e00c6cffb8a8ee5a4ccc4345a073..6d9cb3b0ae9f26db01daae6c2a13a2fed7fa6d0f 100644
--- a/source/components/form/stylesheet/api-button.mjs
+++ b/source/components/form/stylesheet/api-button.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/form/stylesheet/button-bar.mjs b/source/components/form/stylesheet/button-bar.mjs
index 0e928171a3d1a6cd7c2ab01d54b0f8633a4121d6..165d3d6e946b361c09652e7a52427025ede2788f 100644
--- a/source/components/form/stylesheet/button-bar.mjs
+++ b/source/components/form/stylesheet/button-bar.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/form/stylesheet/button.mjs b/source/components/form/stylesheet/button.mjs
index 2d6456751c341b7084c5e6e5ba59f10660baf090..4454e475e4b7c67dcbaf38cd707721cec3b6a3aa 100644
--- a/source/components/form/stylesheet/button.mjs
+++ b/source/components/form/stylesheet/button.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/form/stylesheet/confirm-button.mjs b/source/components/form/stylesheet/confirm-button.mjs
index 2923990e23f2596e6d43aebbe0822a20b5fc55db..6afb65666938bc3bb251815665c1436f0887dc6e 100644
--- a/source/components/form/stylesheet/confirm-button.mjs
+++ b/source/components/form/stylesheet/confirm-button.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/form/stylesheet/context-error.mjs b/source/components/form/stylesheet/context-error.mjs
index 0ed5a87eab7adf5116b3eb042d7ca29a8d84985b..8240d4d98c7a3468b4b2c386d34f5ab42f998fb5 100644
--- a/source/components/form/stylesheet/context-error.mjs
+++ b/source/components/form/stylesheet/context-error.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/form/stylesheet/context-help.mjs b/source/components/form/stylesheet/context-help.mjs
index a2bc5b3fc41d93754dc6601ce4bc55bb23ee84a2..d9c4700375b4155fa23b286188a62a90a240753b 100644
--- a/source/components/form/stylesheet/context-help.mjs
+++ b/source/components/form/stylesheet/context-help.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/form/stylesheet/form-field.mjs b/source/components/form/stylesheet/form-field.mjs
index 5b84257bae34dfa9b74dc67d3acaee570d6de0e3..2c79a8309e34dd7d56fb859f37f3a7a3b058a1f1 100644
--- a/source/components/form/stylesheet/form-field.mjs
+++ b/source/components/form/stylesheet/form-field.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/form/stylesheet/form.mjs b/source/components/form/stylesheet/form.mjs
index 697891a70fa4c7b4daf78262cf838b8ced045898..a3a53ac0610afbb8c097f98851d06978fc04cf49 100644
--- a/source/components/form/stylesheet/form.mjs
+++ b/source/components/form/stylesheet/form.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/form/stylesheet/message-state-button.mjs b/source/components/form/stylesheet/message-state-button.mjs
index 1d614c47dc73c7f8acb941cddf68e22385a6248e..3463a36354ebfd807a71a48b94180067830fe55f 100644
--- a/source/components/form/stylesheet/message-state-button.mjs
+++ b/source/components/form/stylesheet/message-state-button.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/form/stylesheet/popper-button.mjs b/source/components/form/stylesheet/popper-button.mjs
index 93e3e0655e6ac3be45df5dc94d49fab6ddde03e3..3ee3cdc28cd08e66d5843f4b98af8b799ec2720e 100644
--- a/source/components/form/stylesheet/popper-button.mjs
+++ b/source/components/form/stylesheet/popper-button.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/form/stylesheet/popper.mjs b/source/components/form/stylesheet/popper.mjs
index c57ec9899545f55ed1480521fb9c478c35adb3b1..bcbb7c4fe53fa4db91c1e6d21ec77421748ff270 100644
--- a/source/components/form/stylesheet/popper.mjs
+++ b/source/components/form/stylesheet/popper.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/form/stylesheet/select.mjs b/source/components/form/stylesheet/select.mjs
index 47bea4db6dc56c46a5ad78c2bdcfe97b6b52cbf4..52278d19cdc190a746b9f655bbf2ccbd7140b4ed 100644
--- a/source/components/form/stylesheet/select.mjs
+++ b/source/components/form/stylesheet/select.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/form/stylesheet/state-button.mjs b/source/components/form/stylesheet/state-button.mjs
index 11cb1bbbda0176ce3951f5c46fb38cdcf1911d2a..0dbc5b8144b22482d2e4d57421984d794e9eb918 100644
--- a/source/components/form/stylesheet/state-button.mjs
+++ b/source/components/form/stylesheet/state-button.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/form/stylesheet/toggle-switch.mjs b/source/components/form/stylesheet/toggle-switch.mjs
index 530e92bec80a964a424c85f079d571723512db59..fb7a0999fc7b305a309c797c2b2da0829356f1bb 100644
--- a/source/components/form/stylesheet/toggle-switch.mjs
+++ b/source/components/form/stylesheet/toggle-switch.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/form/stylesheet/tree-select.mjs b/source/components/form/stylesheet/tree-select.mjs
index c586e909661be0fd1d72e00a7f9d7eb10e7e783c..bb2366d6e6061f57bfbaf16f55109c5a4bdbdd76 100644
--- a/source/components/form/stylesheet/tree-select.mjs
+++ b/source/components/form/stylesheet/tree-select.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/host/stylesheet/call-button.mjs b/source/components/host/stylesheet/call-button.mjs
index b7f409515452e2d08b434afedc09835a5e7fb96a..921b1590337f0e1953d743fd29baece524fea7ac 100644
--- a/source/components/host/stylesheet/call-button.mjs
+++ b/source/components/host/stylesheet/call-button.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/host/stylesheet/collapse.mjs b/source/components/host/stylesheet/collapse.mjs
index b264170b186d6ad0796738f5c493b0c2c0f7d95c..712f107fb0df1dd80cd2a79afde40de0e504572d 100644
--- a/source/components/host/stylesheet/collapse.mjs
+++ b/source/components/host/stylesheet/collapse.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/host/stylesheet/config-manager.mjs b/source/components/host/stylesheet/config-manager.mjs
index 8a3a7ec4c7634f87219dfd47f255f3047bd3be89..a593e8d2528c3f42f0afddae865b21687c218033 100644
--- a/source/components/host/stylesheet/config-manager.mjs
+++ b/source/components/host/stylesheet/config-manager.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/host/stylesheet/details.mjs b/source/components/host/stylesheet/details.mjs
index 5a20d6d650e6a91c35ddb75e736df7bdbf48ac52..84f93bdb8fa675375e4400c9c06ef937567ebe74 100644
--- a/source/components/host/stylesheet/details.mjs
+++ b/source/components/host/stylesheet/details.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/host/stylesheet/host.mjs b/source/components/host/stylesheet/host.mjs
index 856b4e48e4f1b5fc0c49bd1340252cb33aa770dd..1e982a8391d39886e4b1001b2a1a16c358eeac33 100644
--- a/source/components/host/stylesheet/host.mjs
+++ b/source/components/host/stylesheet/host.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/host/stylesheet/overlay.mjs b/source/components/host/stylesheet/overlay.mjs
index 1670a6924e8531e4c31db5c9a2e475168e7b187c..0ab834fd6b02e81935cbb6529540f8409b680dac 100644
--- a/source/components/host/stylesheet/overlay.mjs
+++ b/source/components/host/stylesheet/overlay.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/host/stylesheet/toggle-button.mjs b/source/components/host/stylesheet/toggle-button.mjs
index fc581811d1040a15ba79f56cc74d4e80afa7880d..bcbe8090561fc5263aa8f592daab463f787d1b58 100644
--- a/source/components/host/stylesheet/toggle-button.mjs
+++ b/source/components/host/stylesheet/toggle-button.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/host/stylesheet/viewer.mjs b/source/components/host/stylesheet/viewer.mjs
index 633d94a8cd5fc32d91931cdad5e253266fcab821..8b334d59cef862d81aab61689fcee6104c0aa9da 100644
--- a/source/components/host/stylesheet/viewer.mjs
+++ b/source/components/host/stylesheet/viewer.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/layout/stylesheet/panel.mjs b/source/components/layout/stylesheet/panel.mjs
index 29b1a16fec4a22cff90ffefd796323800b2f58e4..d685bbd18a00ddf717775c675abc83fe8c92dbe1 100644
--- a/source/components/layout/stylesheet/panel.mjs
+++ b/source/components/layout/stylesheet/panel.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/layout/stylesheet/split-panel.mjs b/source/components/layout/stylesheet/split-panel.mjs
index 2d9b8eea27ae22b4c594b0f50d4e4a5dd7baa771..19b817089e211c2ced9d2bcbef7700939144ee8a 100644
--- a/source/components/layout/stylesheet/split-panel.mjs
+++ b/source/components/layout/stylesheet/split-panel.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/layout/stylesheet/tabs.mjs b/source/components/layout/stylesheet/tabs.mjs
index d66322ebee9f3ad3d41fab67d7f77f7504b3041b..795e14ff85e95dc7922657e7607a4d2e1856740e 100644
--- a/source/components/layout/stylesheet/tabs.mjs
+++ b/source/components/layout/stylesheet/tabs.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/layout/stylesheet/width-toggle.mjs b/source/components/layout/stylesheet/width-toggle.mjs
index 716d614663cb7b2d40f09dfc7355cad302702aaf..8136fc0d05acabc37d59c68d0c8184a6b4f49457 100644
--- a/source/components/layout/stylesheet/width-toggle.mjs
+++ b/source/components/layout/stylesheet/width-toggle.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/notify/stylesheet/message.mjs b/source/components/notify/stylesheet/message.mjs
index df90fc71a7def846a401aacef5b57a02d7391508..09ed8407cd8e9dd319ebe6d0da7d04aea41df193 100644
--- a/source/components/notify/stylesheet/message.mjs
+++ b/source/components/notify/stylesheet/message.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/notify/stylesheet/notify.mjs b/source/components/notify/stylesheet/notify.mjs
index 0e0220ee12cbe0ec1f30cdaf28529f14f7e14290..f915e22a1fb90fe63faea4a3ade923e0b375f4fc 100644
--- a/source/components/notify/stylesheet/notify.mjs
+++ b/source/components/notify/stylesheet/notify.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/state/stylesheet/log.mjs b/source/components/state/stylesheet/log.mjs
index b97b7a9a2e88d9ecf9031a7edc71decc11571047..6f495f58d5067bd97cdfcd627a2cf8f9992c15ec 100644
--- a/source/components/state/stylesheet/log.mjs
+++ b/source/components/state/stylesheet/log.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/state/stylesheet/state.mjs b/source/components/state/stylesheet/state.mjs
index 78e2331fbf1023aad68e95861e2bb12bd901affc..18321b66136cf9706ab23dd7a882c1f23b570761 100644
--- a/source/components/state/stylesheet/state.mjs
+++ b/source/components/state/stylesheet/state.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/badge.mjs b/source/components/stylesheet/badge.mjs
index 86777b3cfca4ffd19756e42ce89f7aebe26c18c7..b19347de2a144994d22f603093edc3a01bceb8cc 100644
--- a/source/components/stylesheet/badge.mjs
+++ b/source/components/stylesheet/badge.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/border.mjs b/source/components/stylesheet/border.mjs
index b740ce142d5de944070743c1708ae7c979c1b45c..01a36b7e6c3008d0d693b8d718e992bd560c0e98 100644
--- a/source/components/stylesheet/border.mjs
+++ b/source/components/stylesheet/border.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/button.mjs b/source/components/stylesheet/button.mjs
index 9e90e5ad52cf47ad23394e06b957faf60c581dcc..605f2a07c1662f4caa5e2c701cbde2e3ce5e708e 100644
--- a/source/components/stylesheet/button.mjs
+++ b/source/components/stylesheet/button.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/card.mjs b/source/components/stylesheet/card.mjs
index 3f3f88694bc02f8414971780a9ff3aa493eb5874..d05bd2b98872ebb03723f04e4f6c3a35248d5aa6 100644
--- a/source/components/stylesheet/card.mjs
+++ b/source/components/stylesheet/card.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/color.mjs b/source/components/stylesheet/color.mjs
index f2614820fb5373cacedc3aafe7ae21b063cff927..03c6160fdc907e06cc9ae0aa3d5c9092dea1858a 100644
--- a/source/components/stylesheet/color.mjs
+++ b/source/components/stylesheet/color.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/common.mjs b/source/components/stylesheet/common.mjs
index 1c90f8e96b9b8d36e4c762d8aeb31fde17ac150e..fc46d39e902416f53b6d7c0da2820b41b201c1eb 100644
--- a/source/components/stylesheet/common.mjs
+++ b/source/components/stylesheet/common.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/control.mjs b/source/components/stylesheet/control.mjs
index e7561a47928b5e8f0b312dd6bbc92e0ca7828dea..5862c1d8f997bb9838aaed7978ecbcddba56f740 100644
--- a/source/components/stylesheet/control.mjs
+++ b/source/components/stylesheet/control.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/data-grid.mjs b/source/components/stylesheet/data-grid.mjs
index d442a4adcd71c9dd4053a0793bae1e20509b0b97..9ecb118e6f4494d94ba6f7e542e3bd03ca364763 100644
--- a/source/components/stylesheet/data-grid.mjs
+++ b/source/components/stylesheet/data-grid.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/display.mjs b/source/components/stylesheet/display.mjs
index d781c595fa3afca5afe8ce83dc68447fce162ebe..35d51ab9c6be1673575f0c79f7d8f268af0bb6cf 100644
--- a/source/components/stylesheet/display.mjs
+++ b/source/components/stylesheet/display.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/floating-ui.mjs b/source/components/stylesheet/floating-ui.mjs
index 893a8500a7665401c70e03fc27ab0d0b7b18b6ef..065e0d6e720c489a0b17bfb68a156e06518ca1f0 100644
--- a/source/components/stylesheet/floating-ui.mjs
+++ b/source/components/stylesheet/floating-ui.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/form.mjs b/source/components/stylesheet/form.mjs
index a4749f2275685190899faf92d020b3b3f21d212b..133c0ae2ff52af5fcf447c54cbc711a5f3f10555 100644
--- a/source/components/stylesheet/form.mjs
+++ b/source/components/stylesheet/form.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/host.mjs b/source/components/stylesheet/host.mjs
index 2a4dcf029df0a554f4927003c94a8c6be2d72857..ce24d88cd5ed98ab943dab52e610a1df0cae3ef6 100644
--- a/source/components/stylesheet/host.mjs
+++ b/source/components/stylesheet/host.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/icons.mjs b/source/components/stylesheet/icons.mjs
index 4be5c1dac099f10f37c3c79f5a7085c2b2e390de..811134f5a6d3b6ca06c47abd6417b8db752d2572 100644
--- a/source/components/stylesheet/icons.mjs
+++ b/source/components/stylesheet/icons.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/link.mjs b/source/components/stylesheet/link.mjs
index a514ea543f93dd5ed29baad1a1124faab5a66b3d..2f3e683b0a83530a62cd7aed6239630669a7902e 100644
--- a/source/components/stylesheet/link.mjs
+++ b/source/components/stylesheet/link.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/mixin/badge.mjs b/source/components/stylesheet/mixin/badge.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..305e244f4f889d0a104bcdac05440bf9dcd7f907
--- /dev/null
+++ b/source/components/stylesheet/mixin/badge.mjs
@@ -0,0 +1,30 @@
+/**
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
+ * Node module: @schukai/monster
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
+ */
+import {addAttributeToken} from "../../../dom/attributes.mjs";
+import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
+
+export {BadgeStyleSheet}
+
+/**
+ * @private
+ * @type {CSSStyleSheet}
+ */
+const BadgeStyleSheet = new CSSStyleSheet();
+
+try {
+  BadgeStyleSheet.insertRule(`
+@layer badge { 
+ 
+}`, 0);
+} catch (e) {
+  addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
+}
diff --git a/source/components/stylesheet/mixin/button.mjs b/source/components/stylesheet/mixin/button.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..d7d787ac8f835c91f97c81616778a8062ce0c26a
--- /dev/null
+++ b/source/components/stylesheet/mixin/button.mjs
@@ -0,0 +1,30 @@
+/**
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
+ * Node module: @schukai/monster
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
+ */
+import {addAttributeToken} from "../../../dom/attributes.mjs";
+import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
+
+export {ButtonStyleSheet}
+
+/**
+ * @private
+ * @type {CSSStyleSheet}
+ */
+const ButtonStyleSheet = new CSSStyleSheet();
+
+try {
+  ButtonStyleSheet.insertRule(`
+@layer button { 
+ 
+}`, 0);
+} catch (e) {
+  addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
+}
diff --git a/source/components/stylesheet/mixin/form.mjs b/source/components/stylesheet/mixin/form.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..866b29a20f14d19ff409b6a2be23764ad425f80b
--- /dev/null
+++ b/source/components/stylesheet/mixin/form.mjs
@@ -0,0 +1,30 @@
+/**
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
+ * Node module: @schukai/monster
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
+ */
+import {addAttributeToken} from "../../../dom/attributes.mjs";
+import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
+
+export {FormStyleSheet}
+
+/**
+ * @private
+ * @type {CSSStyleSheet}
+ */
+const FormStyleSheet = new CSSStyleSheet();
+
+try {
+  FormStyleSheet.insertRule(`
+@layer form { 
+ 
+}`, 0);
+} catch (e) {
+  addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
+}
diff --git a/source/components/stylesheet/mixin/hover.mjs b/source/components/stylesheet/mixin/hover.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..64e9f7f7cfdb972a31e5fe857c1a846a4f45f9a8
--- /dev/null
+++ b/source/components/stylesheet/mixin/hover.mjs
@@ -0,0 +1,30 @@
+/**
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
+ * Node module: @schukai/monster
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
+ */
+import {addAttributeToken} from "../../../dom/attributes.mjs";
+import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
+
+export {HoverStyleSheet}
+
+/**
+ * @private
+ * @type {CSSStyleSheet}
+ */
+const HoverStyleSheet = new CSSStyleSheet();
+
+try {
+  HoverStyleSheet.insertRule(`
+@layer hover { 
+ 
+}`, 0);
+} catch (e) {
+  addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
+}
diff --git a/source/components/stylesheet/mixin/icon.mjs b/source/components/stylesheet/mixin/icon.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..0f55b1536b0d278cd1a1a4f68f3f06b9f819e78a
--- /dev/null
+++ b/source/components/stylesheet/mixin/icon.mjs
@@ -0,0 +1,30 @@
+/**
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
+ * Node module: @schukai/monster
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
+ */
+import {addAttributeToken} from "../../../dom/attributes.mjs";
+import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
+
+export {IconStyleSheet}
+
+/**
+ * @private
+ * @type {CSSStyleSheet}
+ */
+const IconStyleSheet = new CSSStyleSheet();
+
+try {
+  IconStyleSheet.insertRule(`
+@layer icon { 
+ 
+}`, 0);
+} catch (e) {
+  addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
+}
diff --git a/source/components/stylesheet/mixin/media.mjs b/source/components/stylesheet/mixin/media.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..4d12e17cb479d85d824bc131d1047a3934288ccb
--- /dev/null
+++ b/source/components/stylesheet/mixin/media.mjs
@@ -0,0 +1,30 @@
+/**
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
+ * Node module: @schukai/monster
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
+ */
+import {addAttributeToken} from "../../../dom/attributes.mjs";
+import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
+
+export {MediaStyleSheet}
+
+/**
+ * @private
+ * @type {CSSStyleSheet}
+ */
+const MediaStyleSheet = new CSSStyleSheet();
+
+try {
+  MediaStyleSheet.insertRule(`
+@layer media { 
+ 
+}`, 0);
+} catch (e) {
+  addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
+}
diff --git a/source/components/stylesheet/mixin/property.mjs b/source/components/stylesheet/mixin/property.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..b0595e26a087f648dc71d4aaf33db445db5f0921
--- /dev/null
+++ b/source/components/stylesheet/mixin/property.mjs
@@ -0,0 +1,30 @@
+/**
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
+ * Node module: @schukai/monster
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
+ */
+import {addAttributeToken} from "../../../dom/attributes.mjs";
+import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
+
+export {PropertyStyleSheet}
+
+/**
+ * @private
+ * @type {CSSStyleSheet}
+ */
+const PropertyStyleSheet = new CSSStyleSheet();
+
+try {
+  PropertyStyleSheet.insertRule(`
+@layer property { 
+ 
+}`, 0);
+} catch (e) {
+  addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
+}
diff --git a/source/components/stylesheet/mixin/skeleton.mjs b/source/components/stylesheet/mixin/skeleton.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..1054b346d7ab08d7cdf2565c6c0852c9b49ba452
--- /dev/null
+++ b/source/components/stylesheet/mixin/skeleton.mjs
@@ -0,0 +1,30 @@
+/**
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
+ * Node module: @schukai/monster
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
+ */
+import {addAttributeToken} from "../../../dom/attributes.mjs";
+import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
+
+export {SkeletonStyleSheet}
+
+/**
+ * @private
+ * @type {CSSStyleSheet}
+ */
+const SkeletonStyleSheet = new CSSStyleSheet();
+
+try {
+  SkeletonStyleSheet.insertRule(`
+@layer skeleton { 
+ 
+}`, 0);
+} catch (e) {
+  addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
+}
diff --git a/source/components/stylesheet/mixin/spinner.mjs b/source/components/stylesheet/mixin/spinner.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..b103ba0f65fc5e87b53afa309ea9e2c40a7411e8
--- /dev/null
+++ b/source/components/stylesheet/mixin/spinner.mjs
@@ -0,0 +1,30 @@
+/**
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
+ * Node module: @schukai/monster
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
+ */
+import {addAttributeToken} from "../../../dom/attributes.mjs";
+import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
+
+export {SpinnerStyleSheet}
+
+/**
+ * @private
+ * @type {CSSStyleSheet}
+ */
+const SpinnerStyleSheet = new CSSStyleSheet();
+
+try {
+  SpinnerStyleSheet.insertRule(`
+@layer spinner { 
+ 
+}`, 0);
+} catch (e) {
+  addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
+}
diff --git a/source/components/stylesheet/mixin/typography.mjs b/source/components/stylesheet/mixin/typography.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..31693e5dba8e18c7f9cb33358b579e8708bd1196
--- /dev/null
+++ b/source/components/stylesheet/mixin/typography.mjs
@@ -0,0 +1,30 @@
+/**
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
+ * Node module: @schukai/monster
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
+ */
+import {addAttributeToken} from "../../../dom/attributes.mjs";
+import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
+
+export {TypographyStyleSheet}
+
+/**
+ * @private
+ * @type {CSSStyleSheet}
+ */
+const TypographyStyleSheet = new CSSStyleSheet();
+
+try {
+  TypographyStyleSheet.insertRule(`
+@layer typography { 
+ 
+}`, 0);
+} catch (e) {
+  addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
+}
diff --git a/source/components/stylesheet/normalize.mjs b/source/components/stylesheet/normalize.mjs
index 2687f5ed293d96c0f3328036fd47d16da1ce010a..ee0bec06221ff3d107a4c834159a9e1d43a22ed6 100644
--- a/source/components/stylesheet/normalize.mjs
+++ b/source/components/stylesheet/normalize.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/popper.mjs b/source/components/stylesheet/popper.mjs
index 0401a672efed123db87e8253493c74f4848ce70e..75980fedbf1454265374d114fc20b686789f5e93 100644
--- a/source/components/stylesheet/popper.mjs
+++ b/source/components/stylesheet/popper.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/property.mjs b/source/components/stylesheet/property.mjs
index c8e00b3e043923b5ed26f24dec5f2cd53b141cd6..a5579a9e9d42031ae25a42ce7a4a9b24d9a1ef6b 100644
--- a/source/components/stylesheet/property.mjs
+++ b/source/components/stylesheet/property.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/ripple.mjs b/source/components/stylesheet/ripple.mjs
index 9c3956cd7778287468eab2f8ad8f7d080482ae45..a6ad36d9ba2c8dd55c557d121c1950456e0ef10d 100644
--- a/source/components/stylesheet/ripple.mjs
+++ b/source/components/stylesheet/ripple.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/skeleton.mjs b/source/components/stylesheet/skeleton.mjs
index cabbb5ca446865a280374c9504742da6bd6e4df0..9f9a8ed92b2d0fc233ccb2ce557fc98c3826a542 100644
--- a/source/components/stylesheet/skeleton.mjs
+++ b/source/components/stylesheet/skeleton.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/space.mjs b/source/components/stylesheet/space.mjs
index f5df4f1b0c4b6b65bcaf56bed0b706ab3f698b3b..d1be0e686c82493cdcc400119e880b5886935bcc 100644
--- a/source/components/stylesheet/space.mjs
+++ b/source/components/stylesheet/space.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/spinner.mjs b/source/components/stylesheet/spinner.mjs
index 7d45cf6d235e007581fa04f6dd3cec342fbd92d2..26822cce8f6d6e4c2926375e7303b47fde4d77d0 100644
--- a/source/components/stylesheet/spinner.mjs
+++ b/source/components/stylesheet/spinner.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/table.mjs b/source/components/stylesheet/table.mjs
index eca891c6b3d215c41eda747c8eb142a93ae08a46..34ab994d8e2bca8e286401062dc27888e59fcb72 100644
--- a/source/components/stylesheet/table.mjs
+++ b/source/components/stylesheet/table.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/theme.mjs b/source/components/stylesheet/theme.mjs
index 5148835e298e90dea214195b47ba4b6ad8e39bf2..1750cfd6ea58996695c712460cfe69ec56006caa 100644
--- a/source/components/stylesheet/theme.mjs
+++ b/source/components/stylesheet/theme.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/stylesheet/typography.mjs b/source/components/stylesheet/typography.mjs
index 68e6a63b4cb4ae508030e6d5f14845f3d0af1588..863ebc1b78b5a59da4bb6569fedbde8cd4893296 100644
--- a/source/components/stylesheet/typography.mjs
+++ b/source/components/stylesheet/typography.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../dom/constants.mjs";
 
diff --git a/source/components/tree-menu/stylesheet/tree-menu.mjs b/source/components/tree-menu/stylesheet/tree-menu.mjs
index 0c86d240bfb9b458c7baff3e61a2248c21e2a28c..c3af14e15ae13fd01cb3a4f95fea3095689ffe5c 100644
--- a/source/components/tree-menu/stylesheet/tree-menu.mjs
+++ b/source/components/tree-menu/stylesheet/tree-menu.mjs
@@ -1,11 +1,14 @@
-
 /**
- * Copyright schukai GmbH and contributors 2024. All Rights Reserved.
+ * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ * 
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
-
 import {addAttributeToken} from "../../../dom/attributes.mjs";
 import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
 
diff --git a/source/monster.mjs b/source/monster.mjs
index 95ad66ce5cf79bc1b3ed7f035f92338ece030f2b..c7cf55502304db355c362b7bc99a72e0517cfd41 100644
--- a/source/monster.mjs
+++ b/source/monster.mjs
@@ -1,13 +1,15 @@
-
-/**
- * Copyright schukai GmbH and contributors 2023. All Rights Reserved.
+/** * Copyright © schukai GmbH and all contributing authors, 2024. All rights reserved.
  * Node module: @schukai/monster
- * This file is licensed under the AGPLv3 License.
- * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
- * SPDX-License-Identifier: AGPL-3.0-only or COMMERCIAL
+ *
+ * This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
+ * The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
+ *
+ * For those who do not wish to adhere to the AGPLv3, a commercial license is available.
+ * Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
+ * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
 
-/** THIS FILE IS AUTOGENERATED AND SHOULD NOT BE EDITED DIRECTLY. **/
+// THIS FILE IS AUTOGENERATED. DO NOT EDIT THIS FILE DIRECTLY.
 
 /**
  * Main namespace for Monster.
@@ -15,11 +17,14 @@
  * @namespace Monster
  * @author schukai GmbH
  */
-
 export * from "./components/layout/tabs.mjs";
 export * from "./components/layout/split-panel.mjs";
+export * from "./components/layout/width-toggle.mjs";
+export * from "./components/layout/panel.mjs";
 export * from "./components/layout/stylesheet/tabs.mjs";
-export * from "./components/layout/stylesheet/split-screen.mjs";
+export * from "./components/layout/stylesheet/split-panel.mjs";
+export * from "./components/layout/stylesheet/width-toggle.mjs";
+export * from "./components/layout/stylesheet/panel.mjs";
 export * from "./components/form/message-state-button.mjs";
 export * from "./components/form/button-bar.mjs";
 export * from "./components/form/reload.mjs";
@@ -132,6 +137,16 @@ export * from "./components/constants.mjs";
 export * from "./components/stylesheet/host.mjs";
 export * from "./components/stylesheet/badge.mjs";
 export * from "./components/stylesheet/border.mjs";
+export * from "./components/stylesheet/mixin/hover.mjs";
+export * from "./components/stylesheet/mixin/badge.mjs";
+export * from "./components/stylesheet/mixin/spinner.mjs";
+export * from "./components/stylesheet/mixin/property.mjs";
+export * from "./components/stylesheet/mixin/form.mjs";
+export * from "./components/stylesheet/mixin/skeleton.mjs";
+export * from "./components/stylesheet/mixin/typography.mjs";
+export * from "./components/stylesheet/mixin/media.mjs";
+export * from "./components/stylesheet/mixin/button.mjs";
+export * from "./components/stylesheet/mixin/icon.mjs";
 export * from "./components/stylesheet/spinner.mjs";
 export * from "./components/stylesheet/control.mjs";
 export * from "./components/stylesheet/card.mjs";
@@ -261,7 +276,7 @@ export { Monster };
 /**
  * This class has no other purpose than to exist.
  *
- * @license AGPLv3
+ * @license AGPLv3 or commercial license
  * @since 2.0.0
  * @copyright schukai GmbH
  * @memberOf Monster