diff --git a/alfa-client/package-lock.json b/alfa-client/package-lock.json
index 09bd435b8c06a60a20879e3777b41c782d858868..f6b22e828615c42e63ca3439490623f5cdbd35e6 100644
--- a/alfa-client/package-lock.json
+++ b/alfa-client/package-lock.json
@@ -76,6 +76,9 @@
         "@storybook/addon-interactions": "^8.4.2",
         "@storybook/angular": "^8.4.2",
         "@storybook/core-server": "^8.4.2",
+        "@swc-node/register": "~1.9.1",
+        "@swc/core": "~1.5.7",
+        "@swc/helpers": "~0.5.11",
         "@testing-library/jest-dom": "^6.4.5",
         "@types/file-saver": "2.0.7",
         "@types/jest": "29.5.13",
@@ -12363,17 +12366,268 @@
         "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0"
       }
     },
+    "node_modules/@swc-node/core": {
+      "version": "1.13.3",
+      "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc-node/core/-/core-1.13.3.tgz",
+      "integrity": "sha512-OGsvXIid2Go21kiNqeTIn79jcaX4l0G93X2rAnas4LFoDyA9wAwVK7xZdm+QsKoMn5Mus2yFLCc4OtX2dD/PWA==",
+      "devOptional": true,
+      "engines": {
+        "node": ">= 10"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/Brooooooklyn"
+      },
+      "peerDependencies": {
+        "@swc/core": ">= 1.4.13",
+        "@swc/types": ">= 0.1"
+      }
+    },
+    "node_modules/@swc-node/register": {
+      "version": "1.9.2",
+      "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc-node/register/-/register-1.9.2.tgz",
+      "integrity": "sha512-BBjg0QNuEEmJSoU/++JOXhrjWdu3PTyYeJWsvchsI0Aqtj8ICkz/DqlwtXbmZVZ5vuDPpTfFlwDBZe81zgShMA==",
+      "devOptional": true,
+      "dependencies": {
+        "@swc-node/core": "^1.13.1",
+        "@swc-node/sourcemap-support": "^0.5.0",
+        "colorette": "^2.0.20",
+        "debug": "^4.3.4",
+        "pirates": "^4.0.6",
+        "tslib": "^2.6.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/Brooooooklyn"
+      },
+      "peerDependencies": {
+        "@swc/core": ">= 1.4.13",
+        "typescript": ">= 4.3"
+      }
+    },
+    "node_modules/@swc-node/sourcemap-support": {
+      "version": "0.5.1",
+      "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc-node/sourcemap-support/-/sourcemap-support-0.5.1.tgz",
+      "integrity": "sha512-JxIvIo/Hrpv0JCHSyRpetAdQ6lB27oFYhv0PKCNf1g2gUXOjpeR1exrXccRxLMuAV5WAmGFBwRnNOJqN38+qtg==",
+      "devOptional": true,
+      "dependencies": {
+        "source-map-support": "^0.5.21",
+        "tslib": "^2.6.3"
+      }
+    },
+    "node_modules/@swc/core": {
+      "version": "1.5.29",
+      "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core/-/core-1.5.29.tgz",
+      "integrity": "sha512-nvTtHJI43DUSOAf3h9XsqYg8YXKc0/N4il9y4j0xAkO0ekgDNo+3+jbw6MInawjKJF9uulyr+f5bAutTsOKVlw==",
+      "devOptional": true,
+      "hasInstallScript": true,
+      "dependencies": {
+        "@swc/counter": "^0.1.3",
+        "@swc/types": "^0.1.8"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/swc"
+      },
+      "optionalDependencies": {
+        "@swc/core-darwin-arm64": "1.5.29",
+        "@swc/core-darwin-x64": "1.5.29",
+        "@swc/core-linux-arm-gnueabihf": "1.5.29",
+        "@swc/core-linux-arm64-gnu": "1.5.29",
+        "@swc/core-linux-arm64-musl": "1.5.29",
+        "@swc/core-linux-x64-gnu": "1.5.29",
+        "@swc/core-linux-x64-musl": "1.5.29",
+        "@swc/core-win32-arm64-msvc": "1.5.29",
+        "@swc/core-win32-ia32-msvc": "1.5.29",
+        "@swc/core-win32-x64-msvc": "1.5.29"
+      },
+      "peerDependencies": {
+        "@swc/helpers": "*"
+      },
+      "peerDependenciesMeta": {
+        "@swc/helpers": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@swc/core-darwin-arm64": {
+      "version": "1.5.29",
+      "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core-darwin-arm64/-/core-darwin-arm64-1.5.29.tgz",
+      "integrity": "sha512-6F/sSxpHaq3nzg2ADv9FHLi4Fu2A8w8vP8Ich8gIl16D2htStlwnaPmCLjRswO+cFkzgVqy/l01gzNGWd4DFqA==",
+      "cpu": [
+        "arm64"
+      ],
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@swc/core-darwin-x64": {
+      "version": "1.5.29",
+      "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core-darwin-x64/-/core-darwin-x64-1.5.29.tgz",
+      "integrity": "sha512-rF/rXkvUOTdTIfoYbmszbSUGsCyvqACqy1VeP3nXONS+LxFl4bRmRcUTRrblL7IE5RTMCKUuPbqbQSE2hK7bqg==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@swc/core-linux-arm-gnueabihf": {
+      "version": "1.5.29",
+      "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.29.tgz",
+      "integrity": "sha512-2OAPL8iWBsmmwkjGXqvuUhbmmoLxS1xNXiMq87EsnCNMAKohGc7wJkdAOUL6J/YFpean/vwMWg64rJD4pycBeg==",
+      "cpu": [
+        "arm"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@swc/core-linux-arm64-gnu": {
+      "version": "1.5.29",
+      "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.29.tgz",
+      "integrity": "sha512-eH/Q9+8O5qhSxMestZnhuS1xqQMr6M7SolZYxiXJqxArXYILLCF+nq2R9SxuMl0CfjHSpb6+hHPk/HXy54eIRA==",
+      "cpu": [
+        "arm64"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@swc/core-linux-arm64-musl": {
+      "version": "1.5.29",
+      "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.29.tgz",
+      "integrity": "sha512-TERh2OICAJz+SdDIK9+0GyTUwF6r4xDlFmpoiHKHrrD/Hh3u+6Zue0d7jQ/he/i80GDn4tJQkHlZys+RZL5UZg==",
+      "cpu": [
+        "arm64"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@swc/core-linux-x64-gnu": {
+      "version": "1.5.29",
+      "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.29.tgz",
+      "integrity": "sha512-WMDPqU7Ji9dJpA+Llek2p9t7pcy7Bob8ggPUvgsIlv3R/eesF9DIzSbrgl6j3EAEPB9LFdSafsgf6kT/qnvqFg==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@swc/core-linux-x64-musl": {
+      "version": "1.5.29",
+      "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.29.tgz",
+      "integrity": "sha512-DO14glwpdKY4POSN0201OnGg1+ziaSVr6/RFzuSLggshwXeeyVORiHv3baj7NENhJhWhUy3NZlDsXLnRFkmhHQ==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@swc/core-win32-arm64-msvc": {
+      "version": "1.5.29",
+      "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.29.tgz",
+      "integrity": "sha512-V3Y1+a1zG1zpYXUMqPIHEMEOd+rHoVnIpO/KTyFwAmKVu8v+/xPEVx/AGoYE67x4vDAAvPQrKI3Aokilqa5yVg==",
+      "cpu": [
+        "arm64"
+      ],
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@swc/core-win32-ia32-msvc": {
+      "version": "1.5.29",
+      "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.29.tgz",
+      "integrity": "sha512-OrM6yfXw4wXhnVFosOJzarw0Fdz5Y0okgHfn9oFbTPJhoqxV5Rdmd6kXxWu2RiVKs6kGSJFZXHDeUq2w5rTIMg==",
+      "cpu": [
+        "ia32"
+      ],
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@swc/core-win32-x64-msvc": {
+      "version": "1.5.29",
+      "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.29.tgz",
+      "integrity": "sha512-eD/gnxqKyZQQR0hR7TMkIlJ+nCF9dzYmVVNbYZWuA1Xy94aBPUsEk3Uw3oG7q6R3ErrEUPP0FNf2ztEnv+I+dw==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@swc/counter": {
+      "version": "0.1.3",
+      "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/counter/-/counter-0.1.3.tgz",
+      "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
+      "devOptional": true
+    },
     "node_modules/@swc/helpers": {
       "version": "0.5.13",
       "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/helpers/-/helpers-0.5.13.tgz",
       "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==",
-      "dev": true,
+      "devOptional": true,
       "license": "Apache-2.0",
-      "peer": true,
       "dependencies": {
         "tslib": "^2.4.0"
       }
     },
+    "node_modules/@swc/types": {
+      "version": "0.1.17",
+      "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@swc/types/-/types-0.1.17.tgz",
+      "integrity": "sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==",
+      "devOptional": true,
+      "dependencies": {
+        "@swc/counter": "^0.1.3"
+      }
+    },
     "node_modules/@testing-library/dom": {
       "version": "10.4.0",
       "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@testing-library/dom/-/dom-10.4.0.tgz",