From 343cc4c4d7935ba13fe871790fe68dfef1f54a3c Mon Sep 17 00:00:00 2001 From: Paolo Argentieri Date: Mon, 21 Sep 2026 17:58:59 -0700 Subject: [PATCH 01/20] npm config --- .npmrc | 1 + .nvmrc | 1 + 2 files changed, 2 insertions(+) create mode 100644 .npmrc create mode 100644 .nvmrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..ec9e05d8 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +min-release-age=3 diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000..a45fd52c --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +24 From 5fe45775fa417927d2ede62596a398784bbe2641 Mon Sep 17 00:00:00 2001 From: Paolo Argentieri Date: Mon, 21 Sep 2026 18:02:56 -0700 Subject: [PATCH 02/20] npm update --- package-lock.json | 1916 +++++++++++++++++++++++---------------------- 1 file changed, 1001 insertions(+), 915 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0e40c551..193b61fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -332,13 +332,13 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.2102.20", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.20.tgz", - "integrity": "sha512-s7wPFCMrt9mWMr+NWs4T8849snnOE4DcmLb9Set7KtbhV6Z8E7ZASs/wqPOS3KPxLjxTqM6CnkwKhc3Th6DniA==", + "version": "0.2102.24", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.24.tgz", + "integrity": "sha512-U/d5l/1rfrNSlbGjMTunyzwxh+2vJce3y0r0tIx/NOFZbnYhq+gx+e33mR6oxI4yk/1Jks67ltvstrJuBbVbYg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "21.2.20", + "@angular-devkit/core": "21.2.24", "rxjs": "7.8.2" }, "bin": { @@ -351,17 +351,17 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "21.2.20", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-21.2.20.tgz", - "integrity": "sha512-ungbjySjh+4F+3okIKf1XydY+zXl59djXqK9YiAdaLGDex1RaC0nkd7TckVAmVEJR/dJHtqT9heHgFnmrLPgSg==", + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-21.2.24.tgz", + "integrity": "sha512-qJ7ZrKsa08rXkYp5eeVQtepdl+t81Tfl47USit1Uk3VmwOPYoiH/6O0AIemgX2nlqN6FfKk0nVANJZBLcje0Dg==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.2102.20", - "@angular-devkit/build-webpack": "0.2102.20", - "@angular-devkit/core": "21.2.20", - "@angular/build": "21.2.20", + "@angular-devkit/architect": "0.2102.24", + "@angular-devkit/build-webpack": "0.2102.24", + "@angular-devkit/core": "21.2.24", + "@angular/build": "21.2.24", "@babel/core": "7.29.7", "@babel/generator": "7.29.1", "@babel/helper-annotate-as-pure": "7.27.3", @@ -372,7 +372,7 @@ "@babel/preset-env": "7.29.2", "@babel/runtime": "7.29.2", "@discoveryjs/json-ext": "0.6.3", - "@ngtools/webpack": "21.2.20", + "@ngtools/webpack": "21.2.24", "ansi-colors": "4.1.3", "autoprefixer": "10.4.27", "babel-loader": "10.0.0", @@ -384,7 +384,7 @@ "istanbul-lib-instrument": "6.0.3", "jsonc-parser": "3.3.1", "karma-source-map-support": "1.4.0", - "less": "4.4.2", + "less": "4.9.0", "less-loader": "12.3.1", "license-webpack-plugin": "4.0.2", "loader-utils": "3.3.1", @@ -408,7 +408,7 @@ "tslib": "2.8.1", "webpack": "5.105.2", "webpack-dev-middleware": "7.4.5", - "webpack-dev-server": "5.2.5", + "webpack-dev-server": "5.2.6", "webpack-merge": "6.0.1", "webpack-subresource-integrity": "5.1.0" }, @@ -427,7 +427,7 @@ "@angular/platform-browser": "^21.0.0", "@angular/platform-server": "^21.0.0", "@angular/service-worker": "^21.0.0", - "@angular/ssr": "^21.2.20", + "@angular/ssr": "^21.2.24", "@web/test-runner": "^0.20.0", "browser-sync": "^3.0.2", "jest": "^30.2.0", @@ -530,13 +530,13 @@ } }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.2102.20", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2102.20.tgz", - "integrity": "sha512-ULSeZIELAwJuXTMuNh43IH4Xu9MLlsGPQnqXJawwH5Efc5lOT9adCKC9IHMzdKIDTFf/cldWabgEdCaMQR26WQ==", + "version": "0.2102.24", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2102.24.tgz", + "integrity": "sha512-nXW4KRUM62J4+Y8Khb2PNEwK/b2hQ/2gwcOaeAKm+V/qQ/B2w/l8PjpJP21yLdd3jRZDFTvI6ASiq+P7b9QIkQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.2102.20", + "@angular-devkit/architect": "0.2102.24", "rxjs": "7.8.2" }, "engines": { @@ -550,9 +550,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "21.2.20", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.20.tgz", - "integrity": "sha512-QViRAYFj3jcElWND79hM6y4vTSYhMlJSOjy9nby9JsQaPgetkf039jI2u9Lp+PduE6lysewzf85d1UGsm3eI0A==", + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.24.tgz", + "integrity": "sha512-QLYLd6OcfQS5qWTlzG1/d8lFTcJDFcsY6sOaGVtrruYiDxrbeM2iJttoIoKzvbNPROFyo3fANVQJOVhytpXWPg==", "dev": true, "license": "MIT", "dependencies": { @@ -578,14 +578,14 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "22.1.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-22.1.3.tgz", - "integrity": "sha512-ebY5bwZVB0onxxyTbJch//VidVVV8jo/F13n+TV5s/3ZywsC3/XZsfMHaxlFmpvP/G17+/C9JVoEXT+uwjT+/Q==", + "version": "22.1.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-22.1.8.tgz", + "integrity": "sha512-Pv3cPa/44kvEwYcqwx4Ns5dhIDmcFNSHhbpheqiEG1Z/u4e2t4zHKDtE3eHZB+8o+IcC7xJj+d+AqGR44RoZDA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@angular-devkit/core": "22.1.3", + "@angular-devkit/core": "22.1.8", "jsonc-parser": "3.3.1", "magic-string": "1.0.0", "ora": "9.4.1", @@ -598,9 +598,9 @@ } }, "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { - "version": "22.1.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-22.1.3.tgz", - "integrity": "sha512-ASK8oZVElt/Zpz5FrzJjLnnUbzp/fW57eFFSRgpA+n9KRnuFi6YvNdSS3HkG5049Jcukce+PiMBdfzw/jBVkEw==", + "version": "22.1.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-22.1.8.tgz", + "integrity": "sha512-34lsgg2FwMVBX7nR/ZqzRUcdvdYPvSB8XAEr2GudXAyZwLI9ehzfQlagAWR/gEb8p4uCFZW0r7uU0toxydq4Rw==", "dev": true, "license": "MIT", "peer": true, @@ -794,13 +794,13 @@ } }, "node_modules/@angular-eslint/schematics/node_modules/@angular-devkit/schematics": { - "version": "21.2.20", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.20.tgz", - "integrity": "sha512-XH0BtcqSwHlyLRzvbZccSEe5Hcl7Yex8fXfj3gMVBB5g+KBUm2OGtGN3lDOl5BtrwrZBVnNNXkg0ehNrWzxVgw==", + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.24.tgz", + "integrity": "sha512-mLOme2vfbLrHFmMyM6ybPuGCnCvPiemXWdHnptY2Q7Hzum72DabfgtTNsrMcI2F5zrQV2DDQunNjC5cXqtq4/w==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "21.2.20", + "@angular-devkit/core": "21.2.24", "jsonc-parser": "3.3.1", "magic-string": "0.30.21", "ora": "9.3.0", @@ -853,9 +853,9 @@ } }, "node_modules/@angular/animations": { - "version": "21.2.19", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-21.2.19.tgz", - "integrity": "sha512-qC0mviselvpKq2ID9bT+USnCsHKfwZAifkUr5A4h/WCzXvUvpVNWp/RPhGcKeOR+seg3EO5GtIZyblwiRlhzrA==", + "version": "21.2.23", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-21.2.23.tgz", + "integrity": "sha512-hnDKa96XdTogqJRe91S/Pjr8Wgbgf9/7OszKW8MbMZE1Vy7qEmaA1JD86iSNp9QHZ9U/fPX7Wbpq2Zoa5dS2zg==", "deprecated": "@angular/animations is deprecated. Use `animate.enter` and `animate.leave` instead. For more information see: https://v22.angular.dev/guide/animations.", "license": "MIT", "peer": true, @@ -866,18 +866,18 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "21.2.19" + "@angular/core": "21.2.23" } }, "node_modules/@angular/build": { - "version": "21.2.20", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.20.tgz", - "integrity": "sha512-Dl9AX8e3mQpAl4RkmvoNnYRoRSpqMLQBqJYf/quupGLxMpQ55mOBhnGfzmoBLyETFhMUd329tvGtOcicPW/hdA==", + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.24.tgz", + "integrity": "sha512-NurM2W7Q/lCGonkYgSNNxGrh9AYH3LksekYRVxl0KxVKa8Z5x6oMYlLfyI4Lv9Q4C1/x1SXv3xNxgYu/nIW4vA==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.2102.20", + "@angular-devkit/architect": "0.2102.24", "@babel/core": "7.29.7", "@babel/helper-annotate-as-pure": "7.27.3", "@babel/helper-split-export-declaration": "7.24.7", @@ -900,7 +900,7 @@ "semver": "7.7.4", "source-map-support": "0.5.21", "tinyglobby": "0.2.15", - "undici": "7.28.0", + "undici": "7.29.1", "vite": "7.3.6", "watchpack": "2.5.1" }, @@ -920,7 +920,7 @@ "@angular/platform-browser": "^21.0.0", "@angular/platform-server": "^21.0.0", "@angular/service-worker": "^21.0.0", - "@angular/ssr": "^21.2.20", + "@angular/ssr": "^21.2.24", "karma": "^6.4.0", "less": "^4.2.0", "ng-packagr": "^21.0.0", @@ -1014,19 +1014,19 @@ } }, "node_modules/@angular/cli": { - "version": "21.2.20", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.20.tgz", - "integrity": "sha512-ATzRaKSDWIUVHQDU14mO3EVrkoEddfm0b4L/uUJraG2tIevRGYStuzT1jIKlPl8mg+O1cDVIjiqdX114kPHczw==", + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.24.tgz", + "integrity": "sha512-lx8baI3gssBv+xuwEf5wvAoBi7XSIB1RRuAmSnuAO2E4CAlJmU4eiVhKxd/haXvONH6peYxFGH2N6mSrkkHfIQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.2102.20", - "@angular-devkit/core": "21.2.20", - "@angular-devkit/schematics": "21.2.20", + "@angular-devkit/architect": "0.2102.24", + "@angular-devkit/core": "21.2.24", + "@angular-devkit/schematics": "21.2.24", "@inquirer/prompts": "7.10.1", "@listr2/prompt-adapter-inquirer": "3.0.5", - "@modelcontextprotocol/sdk": "1.26.0", - "@schematics/angular": "21.2.20", + "@modelcontextprotocol/sdk": "1.30.0", + "@schematics/angular": "21.2.24", "@yarnpkg/lockfile": "1.1.0", "algoliasearch": "5.48.1", "ini": "6.0.0", @@ -1049,13 +1049,13 @@ } }, "node_modules/@angular/cli/node_modules/@angular-devkit/schematics": { - "version": "21.2.20", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.20.tgz", - "integrity": "sha512-XH0BtcqSwHlyLRzvbZccSEe5Hcl7Yex8fXfj3gMVBB5g+KBUm2OGtGN3lDOl5BtrwrZBVnNNXkg0ehNrWzxVgw==", + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.24.tgz", + "integrity": "sha512-mLOme2vfbLrHFmMyM6ybPuGCnCvPiemXWdHnptY2Q7Hzum72DabfgtTNsrMcI2F5zrQV2DDQunNjC5cXqtq4/w==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "21.2.20", + "@angular-devkit/core": "21.2.24", "jsonc-parser": "3.3.1", "magic-string": "0.30.21", "ora": "9.3.0", @@ -1121,9 +1121,9 @@ } }, "node_modules/@angular/common": { - "version": "21.2.19", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.19.tgz", - "integrity": "sha512-Rvo/VXI0kUmfQT7+OeAjv526OJlf/WrLnJq1Tz84Jkyv9bs9SOMTCT6m4+boo8gxVNdrcxvGU3Q0o2jZzKceSg==", + "version": "21.2.23", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.23.tgz", + "integrity": "sha512-IVhHD4w/+v/S7YAIyF3v20u3zpOj7Y8EuL9xxPyfyxlfz5zPpJFJ/GaZb0Y5sMANCFLVwQj3VcQNWgYtd7W2yA==", "license": "MIT", "peer": true, "dependencies": { @@ -1133,14 +1133,14 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "21.2.19", + "@angular/core": "21.2.23", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "21.2.19", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.19.tgz", - "integrity": "sha512-vuF5i1t14ftJiHXVVLgDYLWkT99QuajphcUHy1VZaMX3FiqSGXRV62g+R2RMxL0OJ5C1ai8xTHKPx9n1lQFyFg==", + "version": "21.2.23", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.23.tgz", + "integrity": "sha512-7HUdsXQKGPqKiRhwsbMGVqtMEVGT4qf5NKpLDmY4kLMeJhjRKchY/4cljEqUERvvXUid6GTWK+/tSJdIcFNnEw==", "license": "MIT", "peer": true, "dependencies": { @@ -1151,9 +1151,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "21.2.19", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.19.tgz", - "integrity": "sha512-QxWqUvhTWgyYPPkfpupOUIEa3Y5cbzMilaFgRNpkvFy6teARw5Izsd7RxUbj3Tp3xJOi1MtumNmkxLxmv3iv7A==", + "version": "21.2.23", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.23.tgz", + "integrity": "sha512-/dtKObY5fvBuNMxLFe9jtnsMwaDV2zm+5sKP2EIWtDO0N18WlZSOFCTL6Tkz3LHE/4y+TjW46POu/rz0q/Cw6A==", "dev": true, "license": "MIT", "peer": true, @@ -1175,7 +1175,7 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "21.2.19", + "@angular/compiler": "21.2.23", "typescript": ">=5.9 <6.1" }, "peerDependenciesMeta": { @@ -1185,9 +1185,9 @@ } }, "node_modules/@angular/core": { - "version": "21.2.19", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.19.tgz", - "integrity": "sha512-PVoXD1kBexOJLkFzKx2zBY/0oZJXGru0eGn2hu0q5n3vkZlYsR1yRolfGenK1gZE48Qibiw/ttg/X/pAIPEZGg==", + "version": "21.2.23", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.23.tgz", + "integrity": "sha512-O8i8ntukAhg3nM9y9A/o1eXVFnFk5/VltA2gQrDuWTpIPLyWmyZW+Zb65UBJI14tGOTt99Y3l3teIuF36mLBgQ==", "license": "MIT", "peer": true, "dependencies": { @@ -1197,7 +1197,7 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "21.2.19", + "@angular/compiler": "21.2.23", "rxjs": "^6.5.3 || ^7.4.0", "zone.js": "~0.15.0 || ~0.16.0" }, @@ -1211,9 +1211,9 @@ } }, "node_modules/@angular/elements": { - "version": "21.2.19", - "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-21.2.19.tgz", - "integrity": "sha512-7FujmjmDDuiMU8QTLH4i9SPgy0p9r+eDX5YhWGQp760T4iF7GVS5Lfklv99H9I8FzYChHXux5fbD767RdfjXqQ==", + "version": "21.2.23", + "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-21.2.23.tgz", + "integrity": "sha512-Z9wk2EqFgQuO6uDdu3ytJ7nVfarWAEf28u228lQpt1dhuqTf2wHlH7PjkROPsxHYv+dxYMlTU5jlK/gWlHMCtg==", "license": "MIT", "peer": true, "dependencies": { @@ -1223,14 +1223,14 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "21.2.19", + "@angular/core": "21.2.23", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/forms": { - "version": "21.2.19", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.19.tgz", - "integrity": "sha512-tEw8cz2UU6VSB+ReJN86k87nRdLRXGi+8SZhoRl2dFu2iReIO3S6kJAVTH7Y9kdrokqTPhWG+KNEzWgqhdjXOg==", + "version": "21.2.23", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.23.tgz", + "integrity": "sha512-l0PyfoCO6MflgQwL4spawbiTqzSrlOWUn1BUcbGuBU33lbgTBrR9dogfT8sQ54ZO/6gcWkToxi0WbvugSfzQtQ==", "license": "MIT", "peer": true, "dependencies": { @@ -1241,9 +1241,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "21.2.19", - "@angular/core": "21.2.19", - "@angular/platform-browser": "21.2.19", + "@angular/common": "21.2.23", + "@angular/core": "21.2.23", + "@angular/platform-browser": "21.2.23", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -1266,9 +1266,9 @@ } }, "node_modules/@angular/platform-browser": { - "version": "21.2.19", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.19.tgz", - "integrity": "sha512-YMguYVhdkV8tr9MvbN+VpMjbdmsYq6g12M9WPvAYM51BkL2iREbWeoXDGmfCw9G0it6+0pMdgrSPFFUFuOqpAQ==", + "version": "21.2.23", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.23.tgz", + "integrity": "sha512-3/yTsYroz6xjH1sqxJwOcBdLEGU4QLouu5z1ja/JN7jrPUfRHj2YBfVS+ayWLEnMt9CfuyjZxoVPXHtWuZ3Gog==", "license": "MIT", "peer": true, "dependencies": { @@ -1278,9 +1278,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/animations": "21.2.19", - "@angular/common": "21.2.19", - "@angular/core": "21.2.19" + "@angular/animations": "21.2.23", + "@angular/common": "21.2.23", + "@angular/core": "21.2.23" }, "peerDependenciesMeta": { "@angular/animations": { @@ -1289,9 +1289,9 @@ } }, "node_modules/@angular/router": { - "version": "21.2.19", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-21.2.19.tgz", - "integrity": "sha512-cKO/aq1xEMvgS29jFUc/Y3KsgEzHnwOw6sEL+UQZkZTmGD5YrYv8Yvj05GDMEUYbvDxBd5DixVVEbH38lyQKqA==", + "version": "21.2.23", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-21.2.23.tgz", + "integrity": "sha512-cNwTd1XvCXsFZqvn4WFPv7VUci7PJzlK9Ex/git3oEyS9318sJjX7sw2IeTpvwIg01BZtF1xBvWgMTHgcXvzIA==", "license": "MIT", "peer": true, "dependencies": { @@ -1301,9 +1301,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "21.2.19", - "@angular/core": "21.2.19", - "@angular/platform-browser": "21.2.19", + "@angular/common": "21.2.23", + "@angular/core": "21.2.23", + "@angular/platform-browser": "21.2.23", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -1772,9 +1772,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", - "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "version": "7.29.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz", + "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==", "dev": true, "license": "MIT", "dependencies": { @@ -3065,33 +3065,6 @@ "keyv": "^5.6.0" } }, - "node_modules/@cacheable/memory/node_modules/@keyv/bigmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz", - "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "hashery": "^1.4.0", - "hookified": "^1.15.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "keyv": "^5.6.0" - } - }, - "node_modules/@cacheable/memory/node_modules/keyv": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", - "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@keyv/serialize": "^1.1.1" - } - }, "node_modules/@cacheable/utils": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.5.0.tgz", @@ -3103,20 +3076,10 @@ "keyv": "^5.6.0" } }, - "node_modules/@cacheable/utils/node_modules/keyv": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", - "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@keyv/serialize": "^1.1.1" - } - }, "node_modules/@csstools/css-calc": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.3.0.tgz", - "integrity": "sha512-c5ihYsPkdG6JCkU2zTMm4+k6r7RXuGxtWYhu5DHMIiF1FHzrfmHL5so11AoFpUv/tu61xfcmT4AmKoFfMPoqdQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.4.0.tgz", + "integrity": "sha512-XQKj5B7QiZcHiegCOCAzcAOJdhGgWOHbbu62h5e5mkHnn8lWcfiJhllkqWmxu5zWR9jucPHuo1iTB56P033hcg==", "dev": true, "funding": [ { @@ -3161,9 +3124,9 @@ } }, "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.7.tgz", - "integrity": "sha512-fQ+05118eQS1cofO3aJpB5efgpBZMvIzwr/sbC8kDLVA5XLG8q1kJV5yzrUAI1f7lvhPnm8fgIjzFB8/O/5Dig==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.14.tgz", + "integrity": "sha512-HpbVXyrofRXpHpgkNIjU/3EWR4WJvOkO3emNK/L6X/mTJU7bGUI3AkkpoTNXznQLp0KRjLHELTGeKI5dIkI9JQ==", "dev": true, "funding": [ { @@ -3186,9 +3149,9 @@ } }, "node_modules/@csstools/css-tokenizer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", - "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.1.tgz", + "integrity": "sha512-bPlN9S9O1A0euCpEWE4qnvB5YDuyYVsUTrxSgmAM1Is0j4tICHoVyOVAXfWMP/kS9ZrjvyIXWV2PmomiAXXqOw==", "dev": true, "funding": [ { @@ -3874,9 +3837,9 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz", - "integrity": "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.3.tgz", + "integrity": "sha512-IkO+/KEUvwbVpiURZg+P7zF74z5Jxe0UgJxVni+RtoHQ6IZieXaO02kmadomap/q+l6bc/jdPGGqTjhuZnuz1Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3929,13 +3892,13 @@ "optional": true }, "node_modules/@hono/node-server": { - "version": "1.19.17", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.17.tgz", - "integrity": "sha512-dSneS5qhiauZWGDCeK4o695Xd9nUNjviSZCMQrj10eetr8Uln1ucn6bbphOM6UynAMMtNIzZNSpL9vnASJwrPQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.1.1.tgz", + "integrity": "sha512-ELuehkj5VCBdgEw9zs+ivkKwyzzUCSQuE96YmiPvn1ECBoZCczbFXJLeEGMTYjphP6gydh4pHMqEYPVMYUVgQg==", "dev": true, "license": "MIT", "engines": { - "node": ">=18.14.1" + "node": ">=20" }, "peerDependencies": { "hono": "^4" @@ -4424,9 +4387,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", "dev": true, "license": "MIT" }, @@ -4493,14 +4456,14 @@ } }, "node_modules/@jsonjoy.com/fs-core": { - "version": "4.68.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.68.1.tgz", - "integrity": "sha512-V5oZ4Gt9WJKyQef0n9cAd0N9qjSkIBm3E4MYsgNIWBk5aINCDPKxMPo1i29rBxqiT4Ixf1epklqV9VJMKIxwlw==", + "version": "4.78.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.78.1.tgz", + "integrity": "sha512-UUGcxEah6eb6PyrF8RDEuVgR0Cs2K6XTiLH7YxNR3DknL3wZCNx1nU5m2Gq5Wq8ipy4uHDay3xt/50KyoTN6Zg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.68.1", - "@jsonjoy.com/fs-node-utils": "4.68.1", + "@jsonjoy.com/fs-node-builtins": "4.78.1", + "@jsonjoy.com/fs-node-utils": "4.78.1", "thingies": "^2.5.0" }, "engines": { @@ -4515,15 +4478,15 @@ } }, "node_modules/@jsonjoy.com/fs-fsa": { - "version": "4.68.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.68.1.tgz", - "integrity": "sha512-HCG72UioncuO7Gw09XNVG+S85e3cq2hrUC/mexBrsWsa3mI7eePkkqWie3uVYbtsb64OR9YGQs5SqaufDRYBcg==", + "version": "4.78.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.78.1.tgz", + "integrity": "sha512-PaoXI4HAELQ/DYxCtqHne7ijrTE0BIEFYXI/qTy4f6pThXiYT5QyJkk96bzpcjdo2D+OM0pUv7mkwffSAl/GSQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.68.1", - "@jsonjoy.com/fs-node-builtins": "4.68.1", - "@jsonjoy.com/fs-node-utils": "4.68.1", + "@jsonjoy.com/fs-core": "4.78.1", + "@jsonjoy.com/fs-node-builtins": "4.78.1", + "@jsonjoy.com/fs-node-utils": "4.78.1", "thingies": "^2.5.0" }, "engines": { @@ -4538,18 +4501,18 @@ } }, "node_modules/@jsonjoy.com/fs-node": { - "version": "4.68.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.68.1.tgz", - "integrity": "sha512-R5D9mWtqdURzcOWj1vdXr3APCwX0xchtFT+kmW7fXLNDifWdDrnh26jSID8pdnUfFBxTyfHtFtTL/NWKzIH7kQ==", + "version": "4.78.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.78.1.tgz", + "integrity": "sha512-3z6o4qVdKUZTHNXiV+3bKAUkQSD5a2kFwwwag8fe6VvgZ4WNfDbMzWdGvoGx+oRpOcr1iWA9WYwVeVMjSir4mA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.68.1", - "@jsonjoy.com/fs-node-builtins": "4.68.1", - "@jsonjoy.com/fs-node-utils": "4.68.1", - "@jsonjoy.com/fs-print": "4.68.1", - "@jsonjoy.com/fs-snapshot": "4.68.1", - "glob-to-regex.js": "^1.0.0", + "@jsonjoy.com/fs-core": "4.78.1", + "@jsonjoy.com/fs-node-builtins": "4.78.1", + "@jsonjoy.com/fs-node-utils": "4.78.1", + "@jsonjoy.com/fs-print": "4.78.1", + "@jsonjoy.com/fs-snapshot": "4.78.1", + "glob-to-regex.js": "^1.3.1", "thingies": "^2.5.0" }, "engines": { @@ -4564,9 +4527,9 @@ } }, "node_modules/@jsonjoy.com/fs-node-builtins": { - "version": "4.68.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.68.1.tgz", - "integrity": "sha512-HK1BTksysokNZxNspqDH0yPaqN9YgR/AYIlYiIaU2Ys4BOk5CdybI7r6BgiZuiiPiV8n4sK/kZdice7Znpy2Kw==", + "version": "4.78.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.78.1.tgz", + "integrity": "sha512-yaGM1l77yYANFl+w2gdixRZhcQhKodtbI4FZgJg2ApfTTSJcxdYEekU+Ta92sCqSwrOtY+ru4IP81tgJxWXIyA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4581,15 +4544,15 @@ } }, "node_modules/@jsonjoy.com/fs-node-to-fsa": { - "version": "4.68.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.68.1.tgz", - "integrity": "sha512-lpKmU4X9e/oh8GIuAI7EXaS5QiLNM3KD15CkdhfS6PYmrGvoJqKQcyEfnLgnnaGslh/PFUMYSIZBCf2ejJGw8g==", + "version": "4.78.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.78.1.tgz", + "integrity": "sha512-/Z00TkjLD8zPRimbINaiAQRqpE9HZmiGfxQFMqNcHncmhijS3JsAW21gcNO/16jujoDwXOyEaSSeK+pBtv8QHQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-fsa": "4.68.1", - "@jsonjoy.com/fs-node-builtins": "4.68.1", - "@jsonjoy.com/fs-node-utils": "4.68.1" + "@jsonjoy.com/fs-fsa": "4.78.1", + "@jsonjoy.com/fs-node-builtins": "4.78.1", + "@jsonjoy.com/fs-node-utils": "4.78.1" }, "engines": { "node": ">=10.0" @@ -4603,14 +4566,14 @@ } }, "node_modules/@jsonjoy.com/fs-node-utils": { - "version": "4.68.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.68.1.tgz", - "integrity": "sha512-/GxfW1DWm9SCdkfbvqevLO/P5duobQfmKkHXxdMIDbcZMQeAgooAstIfZhkXpATzq9QbCQsnoWFM/dGHdZfndw==", + "version": "4.78.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.78.1.tgz", + "integrity": "sha512-wm0PVK6XpjHH6GLGVi60+ubD7pNv91KwQ8SBWwn+orRTYdfEIci59/VlOddIGhUSde0t9W9gLNetlPKQHQJsSQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.68.1", - "glob-to-regex.js": "^1.0.1" + "@jsonjoy.com/fs-node-builtins": "4.78.1", + "glob-to-regex.js": "^1.3.1" }, "engines": { "node": ">=10.0" @@ -4624,13 +4587,13 @@ } }, "node_modules/@jsonjoy.com/fs-print": { - "version": "4.68.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.68.1.tgz", - "integrity": "sha512-oGeZOGPYKK9v1CgeVeEDsLomH1lCnslSpqUN5GmPzrmAVGQlsmsdcXNA2O4lV8Y4xkuSuynx2ITBkUHJVaTbow==", + "version": "4.78.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.78.1.tgz", + "integrity": "sha512-NUwSD+BOz0TUpBc+riQpI1G1vOhViSZePeqUPxKznelsk3Iwotu6T/02UAY9WdaGcLdlDX8pllEIyxehnYo9Ng==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-utils": "4.68.1", + "@jsonjoy.com/fs-node-utils": "4.78.1", "tree-dump": "^1.1.0" }, "engines": { @@ -4645,14 +4608,14 @@ } }, "node_modules/@jsonjoy.com/fs-snapshot": { - "version": "4.68.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.68.1.tgz", - "integrity": "sha512-XZfP0FDZN32bbc4t2bZN2qRrYHg5AktJnzk22HRoKGK4BprrbNRH2k5ceSNS/kupKYcofCs+O841+xaAbjnxwQ==", + "version": "4.78.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.78.1.tgz", + "integrity": "sha512-gejpLh45sgYGEHWZP/LP2etxaUOYawDfbFVckl9xDDEvgSAtZf700MzCAGbPBPBzRL+qW5UDDwacIgYXHY3C9Q==", "dev": true, "license": "Apache-2.0", "dependencies": { "@jsonjoy.com/buffers": "^17.65.0", - "@jsonjoy.com/fs-node-utils": "4.68.1", + "@jsonjoy.com/fs-node-utils": "4.78.1", "@jsonjoy.com/json-pack": "^17.65.0", "@jsonjoy.com/util": "^17.65.0" }, @@ -4872,6 +4835,23 @@ "tslib": "2" } }, + "node_modules/@keyv/bigmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz", + "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hashery": "^1.4.0", + "hookified": "^1.15.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "keyv": "^5.6.0" + } + }, "node_modules/@keyv/serialize": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", @@ -4880,21 +4860,21 @@ "license": "MIT" }, "node_modules/@laserfiche/lf-api-client-core": { - "version": "1.1.21", - "resolved": "https://registry.npmjs.org/@laserfiche/lf-api-client-core/-/lf-api-client-core-1.1.21.tgz", - "integrity": "sha512-K8boA4pMbNBFkRFwVFtI7st9zvOSz8c0gPYDH8jJLS8v6Lul6Iy+aHr+t/L/92xi+jbulo9gqzZbaX63EWjdJQ==", + "version": "1.1.23", + "resolved": "https://registry.npmjs.org/@laserfiche/lf-api-client-core/-/lf-api-client-core-1.1.23.tgz", + "integrity": "sha512-N+/VTi9uUTaSrD5DhllvDGY4+VW5vSevVWXzgKdicVMnBvusPrua2f+ZFyKm8gKZrR9U1P/BwJ0C1eyYafblaA==", "license": "MIT", "peer": true, "dependencies": { - "@laserfiche/lf-js-utils": "^4.0.15", + "@laserfiche/lf-js-utils": "^4.0.17", "jsrsasign": "^11.1.1", "jsrsasign-util": "^1.0.5" } }, "node_modules/@laserfiche/lf-js-utils": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@laserfiche/lf-js-utils/-/lf-js-utils-4.0.15.tgz", - "integrity": "sha512-f+JH13IuTM1TwbM54ZjT+pd6qBOChTI/rXrv0Gur8a2x1o592WlKVt/KFfuEEd6hdavlr6ZfewboN/JwKTryIw==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@laserfiche/lf-js-utils/-/lf-js-utils-4.0.17.tgz", + "integrity": "sha512-DVW0nyre3/po2c5zIgt9eEunuabjTJLmjOk9K3LsCOYZyCz5Iwbv26zLhtrsM9MKiE4fWSvU7FpoQ8WMrYOeHw==", "license": "MIT", "peer": true }, @@ -5032,19 +5012,19 @@ ] }, "node_modules/@microsoft/api-extractor": { - "version": "7.58.12", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.58.12.tgz", - "integrity": "sha512-VNpgC/1LaroLbn+UKmwDYspq+9r3EHyj4vJ3qUy/g8vB0rKt+1Wgs7WFj/JGpgxhG8SNyXs1XwYwe7nqkk8IDg==", + "version": "7.59.1", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.59.1.tgz", + "integrity": "sha512-GjRUqx1MTY7xuH36urwASkfBPzrdxYG+irVeV7C9JEdRtn509AgMmwit/BhvztQzIoFk9vhFDTVYOp2cjw+9Uw==", "dev": true, "license": "MIT", "dependencies": { - "@microsoft/api-extractor-model": "7.33.10", + "@microsoft/api-extractor-model": "7.33.12", "@microsoft/tsdoc": "~0.16.0", "@microsoft/tsdoc-config": "~0.18.1", - "@rushstack/node-core-library": "5.23.3", + "@rushstack/node-core-library": "5.24.1", "@rushstack/rig-package": "0.7.3", - "@rushstack/terminal": "0.24.2", - "@rushstack/ts-command-line": "5.3.12", + "@rushstack/terminal": "0.24.4", + "@rushstack/ts-command-line": "5.3.14", "diff": "~8.0.2", "minimatch": "10.2.3", "resolve": "~1.22.1", @@ -5054,18 +5034,24 @@ }, "bin": { "api-extractor": "bin/api-extractor" + }, + "engines": { + "node": ">=20.9.0" } }, "node_modules/@microsoft/api-extractor-model": { - "version": "7.33.10", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.33.10.tgz", - "integrity": "sha512-uPUK17xGxeQ3av6TN7awp+dTTSTvx8fZC0XFL1gyt7hFapYuxND3XLXH8vkmI7UjfW92oogzFAFqHSifmJROaw==", + "version": "7.33.12", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.33.12.tgz", + "integrity": "sha512-TdKOYgwf98xLjNW+y3iXIiCf4ZLQbilGAlqkMTTAqqAWfgRXAn9YCSGMsaiB1U7OPRvslUWg6n08EqQPbP93tA==", "dev": true, "license": "MIT", "dependencies": { "@microsoft/tsdoc": "~0.16.0", "@microsoft/tsdoc-config": "~0.18.1", - "@rushstack/node-core-library": "5.23.3" + "@rushstack/node-core-library": "5.24.1" + }, + "engines": { + "node": ">=20.9.0" } }, "node_modules/@microsoft/api-extractor/node_modules/source-map": { @@ -5086,26 +5072,33 @@ "license": "MIT" }, "node_modules/@microsoft/tsdoc-config": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.18.1.tgz", - "integrity": "sha512-9brPoVdfN9k9g0dcWkFeA7IH9bbcttzDJlXvkf8b2OBzd5MueR1V2wkKBL0abn0otvmkHJC6aapBOTJDDeMCZg==", + "version": "0.18.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.18.2.tgz", + "integrity": "sha512-4ymuLTQ9lFwJXK15f41iPcNHflymjk02Ltq5f5wo3fA02O1nHIGSc1TIZwzTSQZep+jXHM644jobt4Q8O3vtqg==", "dev": true, "license": "MIT", "dependencies": { - "@microsoft/tsdoc": "0.16.0", + "@microsoft/tsdoc": "0.17.0", "ajv": "~8.18.0", "jju": "~1.4.0", "resolve": "~1.22.2" } }, + "node_modules/@microsoft/tsdoc-config/node_modules/@microsoft/tsdoc": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.17.0.tgz", + "integrity": "sha512-p68VexhnH7ojf3U27RdryUDqnKJgKaWUbCL96vJR7N0mqDuhKG5OIECk3sCPPdynxjk+yoVhRkScqtv5KQjzsw==", + "dev": true, + "license": "MIT" + }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.26.0.tgz", - "integrity": "sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==", + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.30.0.tgz", + "integrity": "sha512-xKd8OIzlqNzcqcNumGAa6g+PW2kjD5vrpcKOnfldAUPP3j7lnqMPwlTXQm8gF+UwH72z0lqaRbjr9hqGz0eITA==", "dev": true, "license": "MIT", "dependencies": { - "@hono/node-server": "^1.19.9", + "@hono/node-server": "^1.19.9 || ^2.0.5", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", @@ -5588,9 +5581,9 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.2.tgz", - "integrity": "sha512-JfB4kuJQjaoHuCTseIINHtHWeJnvgEcxjwA5t/Y00ZgaOO1Crz3fjT/p8kT28zA/Caz7oiUMn3d6H2yOVCVwuw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.4.tgz", + "integrity": "sha512-AJxoUD2/15ESHbvpcyjU274nsAPLuOtPHCk0vKJM5pj//Fg/B1FXNWjPnXTT9PymCYYiHo4zPj0ZomXBKhoy7g==", "dev": true, "license": "MIT", "optional": true, @@ -5605,14 +5598,14 @@ "url": "https://github.com/sponsors/Brooooooklyn" }, "peerDependencies": { - "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.3", - "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.3" + "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", + "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" } }, "node_modules/@ngtools/webpack": { - "version": "21.2.20", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-21.2.20.tgz", - "integrity": "sha512-6UQlsKYdPoINJA07dNWP505rru0gJ08oP8O3H6XHW1H0jEj04e498IMNgoKqw4ZTREExhOX3Zts693hAaASABA==", + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-21.2.24.tgz", + "integrity": "sha512-9l6pXbXUGQscJgSL1rc960tmw2c0QkNABhWyDysaKTAX3Lu/7cjEckIxZNlGsdoK/TwetC23R2CRZdbMqvGszw==", "dev": true, "license": "MIT", "engines": { @@ -5695,9 +5688,9 @@ } }, "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "11.5.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", - "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "version": "11.5.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.3.tgz", + "integrity": "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -5748,9 +5741,9 @@ } }, "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "11.5.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", - "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "version": "11.5.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.3.tgz", + "integrity": "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -6210,139 +6203,169 @@ "optional": true }, "node_modules/@peculiar/asn1-cms": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.8.0.tgz", - "integrity": "sha512-NgekZOrSJFSBFLFoLfwePguAWAx7z1+f2TEsWFUMyiqqfntZ4+S/S5hzqME3q4pCA0iOsFKdwiQ35dwY24eVqA==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.9.4.tgz", + "integrity": "sha512-cben7oxmQsUGZqotus7yt0srYdncOT6RNWcTQ77T2RFOXejYVYkXadrfePdRcrVpO9K95IRLKKglG2k38jKXuw==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", - "@peculiar/asn1-x509-attr": "^2.8.0", + "@peculiar/asn1-schema": "^2.9.4", + "@peculiar/asn1-x509": "^2.9.4", + "@peculiar/asn1-x509-attr": "^2.9.4", "asn1js": "^3.0.10", "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" } }, "node_modules/@peculiar/asn1-csr": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.8.0.tgz", - "integrity": "sha512-akbF8+uvleHs8sejNPQxwmVFuInAg6FMNHOwMILXfP518YfFJwdR3jr6oNUPOaEJfuEhn/vkNOCIT6ASUd4mbg==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.9.4.tgz", + "integrity": "sha512-xd4YN4vpRjkDAQWVfZZkeu12IEND7DOpkqaHSIHxZl1uggUNa9Ju0QxY2jHvDAS9pP0zhRBytg8ifsnGo3V0jw==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", + "@peculiar/asn1-schema": "^2.9.4", + "@peculiar/asn1-x509": "^2.9.4", "asn1js": "^3.0.10", "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" } }, "node_modules/@peculiar/asn1-ecc": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.8.0.tgz", - "integrity": "sha512-ohwlk+u9Rv2NOAY1c6MfHj45ATVF8R1DUN/WCgABiRtLi2ZftlZWZX7KvpAbU8v9xPcmoILfELeEABj/rn18AQ==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.9.4.tgz", + "integrity": "sha512-JJXefFshRAuVAjWQo/39bkg1ywc1VaiO44S8RRC+Ykvf/u2KDmYffoDb0ZBPCR5uJy4AGKQhl8mX+Q8ShcWaXQ==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", + "@peculiar/asn1-schema": "^2.9.4", + "@peculiar/asn1-x509": "^2.9.4", "asn1js": "^3.0.10", "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" } }, "node_modules/@peculiar/asn1-pfx": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.8.0.tgz", - "integrity": "sha512-5yof1ytoB++RQtaFbqSUJ8pxDJtZT6vbVqZ8XoJ61ph7UjNVvfFwAilnCodqkNsAodpy13gDhoxZXw00pghnyg==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.9.4.tgz", + "integrity": "sha512-khuGzHTzNzk4GDlIBEILyIs6Lce0yn0ZBdoI9v93kmNncfZRhD+AQ5ODFqdhvoE8cMJF/JMTQ8yA+t1D14kqCw==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-cms": "^2.8.0", - "@peculiar/asn1-pkcs8": "^2.8.0", - "@peculiar/asn1-rsa": "^2.8.0", - "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-cms": "^2.9.4", + "@peculiar/asn1-pkcs8": "^2.9.4", + "@peculiar/asn1-rsa": "^2.9.4", + "@peculiar/asn1-schema": "^2.9.4", "asn1js": "^3.0.10", "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" } }, "node_modules/@peculiar/asn1-pkcs8": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.8.0.tgz", - "integrity": "sha512-qAKXtLpBEw9LqhKpjw3ajZSXlBur+ipW+y2ivVBQAG6F6qRx94yO+1ZR4mvw+YaCfKSaOzLeYEzsPaBp4SJELA==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.9.4.tgz", + "integrity": "sha512-duRdotlUx9eDZe6QrQpQKl61RbWykCHBCkKayP8V8XdEFwlKHZ8qGGDMyS6Pye7OX7nLFttTTpRkJeet78ckwQ==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", + "@peculiar/asn1-schema": "^2.9.4", + "@peculiar/asn1-x509": "^2.9.4", "asn1js": "^3.0.10", "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" } }, "node_modules/@peculiar/asn1-pkcs9": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.8.0.tgz", - "integrity": "sha512-b5nDWCnkV60+cQ141D6sVVwK9nz64R5n3zSVnklGd+ECdkW2Ol3U1a6yYFlalpSOaD557yuJB64A+q42jG7lUQ==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.9.4.tgz", + "integrity": "sha512-kaL4cNxBpdQE2dKlyZBqz4ygCrwffO+8wfoxTEqM1Z8RadvCeELBRzcv0dzM8aY9azHMwODO5nxU65zXmhToOQ==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-cms": "^2.8.0", - "@peculiar/asn1-pfx": "^2.8.0", - "@peculiar/asn1-pkcs8": "^2.8.0", - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", - "@peculiar/asn1-x509-attr": "^2.8.0", + "@peculiar/asn1-cms": "^2.9.4", + "@peculiar/asn1-pfx": "^2.9.4", + "@peculiar/asn1-pkcs8": "^2.9.4", + "@peculiar/asn1-schema": "^2.9.4", + "@peculiar/asn1-x509": "^2.9.4", + "@peculiar/asn1-x509-attr": "^2.9.4", "asn1js": "^3.0.10", "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" } }, "node_modules/@peculiar/asn1-rsa": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.8.0.tgz", - "integrity": "sha512-zHEUlCqB2mk7x2lxDwHHJy7hWZOPdGHVlsmITWKB5/PbQo61atbu9PJ/0r9dQNMwFzbKPXZ8uK8/91eUhRznSg==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.9.4.tgz", + "integrity": "sha512-pZ96eD1PptovcWQ/GSmuNFXd/7EQJNlKfDaNCyE2rx3W0v6QFelkzquVqRSRyyDXXCYD69ZXJDzZ8GhIiQzKoA==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", + "@peculiar/asn1-schema": "^2.9.4", + "@peculiar/asn1-x509": "^2.9.4", "asn1js": "^3.0.10", "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" } }, "node_modules/@peculiar/asn1-schema": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.8.0.tgz", - "integrity": "sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.9.4.tgz", + "integrity": "sha512-GjzePcT9Iw8NzeOPf73iNS9xM+TBhd/FilAfP+RQGkTMQJTVWtytN3JHJACCjf/ABNau5S7mS3g+DcuxmRgYEg==", "dev": true, "license": "MIT", "dependencies": { "@peculiar/utils": "^2.0.2", "asn1js": "^3.0.10", "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" } }, "node_modules/@peculiar/asn1-x509": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.8.0.tgz", - "integrity": "sha512-N0CMuhWUzsWEVq6F1q9X6+VKUnWzSW+cSVg+aPaGGwDdbFoFWTYgin5MHwXgpWd6y9COMBxnfy/Qc+Xc7F0Zwg==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.9.4.tgz", + "integrity": "sha512-CxhBo/RdEbMMob7T31ZdQjGuoyRFLVwrDzTn25bihzBasRg9kRm/0IxIPvhgQtcK/9dNcO1XQL2fuPugwELL0Q==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-schema": "^2.9.4", "@peculiar/utils": "^2.0.2", "asn1js": "^3.0.10", "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" } }, "node_modules/@peculiar/asn1-x509-attr": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.8.0.tgz", - "integrity": "sha512-tHjkfS/qhMnmrlB2J9NhflQlQ7In3khO3CfmVrriOlpTeErY9ZIKOso1hQ5JQiyrJ7ShvqVPk7E5fQmbclkSKA==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.9.4.tgz", + "integrity": "sha512-ehQXbpQaQYycgu8OrvigwSPTFfVRcu0ECNYCWw+yzBp02Lw5paRqzzhUpfOgO2K38+WfFZuEz/0RPtam5g0OMg==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.8.0", - "@peculiar/asn1-x509": "^2.8.0", + "@peculiar/asn1-schema": "^2.9.4", + "@peculiar/asn1-x509": "^2.9.4", "asn1js": "^3.0.10", "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14" } }, "node_modules/@peculiar/utils": { @@ -6677,9 +6700,9 @@ "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.4.tgz", - "integrity": "sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.63.3.tgz", + "integrity": "sha512-w3Jnvi1ocaVm/c7yVPpfB98XeSRBMyzp6njL5MVVbGyXjpmUkN+s6Hp4t0PqhGCCaI1ZHMKXt/w0lA1RCaLVcw==", "cpu": [ "arm" ], @@ -6691,9 +6714,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.4.tgz", - "integrity": "sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.63.3.tgz", + "integrity": "sha512-uI/ESiaIbbRYAEhzy8PCUWDp1hB0bjAqM06mW9flOoNO4Q8DQpeoREhBR5Hegfl+wpXiguyJv6XSPzEN7OxyHQ==", "cpu": [ "arm64" ], @@ -6705,9 +6728,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.4.tgz", - "integrity": "sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.63.3.tgz", + "integrity": "sha512-oxhrd1jmXLwWZ83eQYDXxuqRdkqkzrjR3JobKeuUyfdNZo11FuQIvqEOZhyIT7OBHxXoGslDDjN0cQcM6T0TqQ==", "cpu": [ "arm64" ], @@ -6719,9 +6742,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.4.tgz", - "integrity": "sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.63.3.tgz", + "integrity": "sha512-7/YiIMghVE8DrxKvNdorAaJVdriOFgOIpdStnPx8ppx5zfTwC3jBCSEAIzB7JD5404m65THl6H93UTTVUvypmg==", "cpu": [ "x64" ], @@ -6733,9 +6756,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.4.tgz", - "integrity": "sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.63.3.tgz", + "integrity": "sha512-GXFZRRoMAytaI5z6N3Zhfw0WL18Q0M8r95D5hlC4GqE/lGk8pbSJNUBoOWDfbm6dTciqHj2nU87tI5f6XhQiOg==", "cpu": [ "arm64" ], @@ -6747,9 +6770,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.4.tgz", - "integrity": "sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.63.3.tgz", + "integrity": "sha512-77W+8X3ddYgPxUpB8nZFQs2Mq+wc4HVlcSRtApXLjYBcnPMkttrSnU8VwKQjeWYhMsITHFs5cWBQ8vz1Q+5RHQ==", "cpu": [ "x64" ], @@ -6761,9 +6784,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.4.tgz", - "integrity": "sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.63.3.tgz", + "integrity": "sha512-FVkwK+iUC+mq+GipVK46rRVticfAPtvPUNlqlGXUDxdVk/UGjQiiiUVPUrEXdSpU2ufU0XxLGyTqDtBidDOVmg==", "cpu": [ "arm" ], @@ -6778,9 +6801,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.4.tgz", - "integrity": "sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.63.3.tgz", + "integrity": "sha512-+aGU1t3398yQOVj1Bz8o3e+KtswxAPvO+mtxtNdfXYMkXIHu7XhhkCD7/DEH9q8tF8uhDnMWvfpUKI8y1sZJsg==", "cpu": [ "arm" ], @@ -6795,9 +6818,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.4.tgz", - "integrity": "sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.63.3.tgz", + "integrity": "sha512-cR0kjpRXR2KJ2oQK8E2KTPtphs+b9hZ8IhTZubNryt/RsqgdOZBQ2Zq0q5UedtiIi0rs3jVhJh55RE1ZHUVGUA==", "cpu": [ "arm64" ], @@ -6812,9 +6835,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.4.tgz", - "integrity": "sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.63.3.tgz", + "integrity": "sha512-y1RYi4Q3/9ByVWSSt9kX2ustE0B7kFYbJ6zZdVZVyqopZs3yhCTwRfrjIX4vezUJInma/Gs6BOFDJg7yZmJ0IQ==", "cpu": [ "arm64" ], @@ -6829,9 +6852,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.4.tgz", - "integrity": "sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.63.3.tgz", + "integrity": "sha512-DNhEA5viIj3Z5bZLE4z4oV8N5ozWqDwyt7T6KG7VdLDJ0nW+rNOYlphBl4/3HQkK75qipPLsVOfStHHOwN9WSg==", "cpu": [ "loong64" ], @@ -6846,9 +6869,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.4.tgz", - "integrity": "sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.63.3.tgz", + "integrity": "sha512-17gQCqrIpXBX2Cmi9/TygnVOqGbzsba/iaqcYSL8FY7lNugg+7AiYNs5c5nKWD+NRQha36Sa0CqkJqH4XVHwnQ==", "cpu": [ "loong64" ], @@ -6863,9 +6886,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.4.tgz", - "integrity": "sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.63.3.tgz", + "integrity": "sha512-6LwVnZRIyINpdku/yOcI8Tm9YqLmhHK5emmlOOnW9tO0SYEm1FmKPcsSAGp0NBlqR2P04xaND4jvN6sTHqhq8A==", "cpu": [ "ppc64" ], @@ -6880,9 +6903,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.4.tgz", - "integrity": "sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.63.3.tgz", + "integrity": "sha512-xMUqkTXlEUtI/p5AAukMwBRr1enU3efsTeF+bskeFfk8t1C9rcC8sLREcZXmTfAXEbvRdJVSonVJez3TMlbR3w==", "cpu": [ "ppc64" ], @@ -6897,9 +6920,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.4.tgz", - "integrity": "sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.63.3.tgz", + "integrity": "sha512-S3E94co9F9WRRqEaUoQZ38K1gCz6KiM+nL7/3ijq7fDGF3OznjS5TasgYITlvl27GQKtu4lOAOsr5MFwkijvOA==", "cpu": [ "riscv64" ], @@ -6914,9 +6937,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.4.tgz", - "integrity": "sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.63.3.tgz", + "integrity": "sha512-1QtRDwG42x5BJI3s9mxu5rEjDnfbSnk20HQ9/ylTAYnSwYwxMVb+Vgu34wzzTQ7ogqBybebgQNUDAvZVQ38DbA==", "cpu": [ "riscv64" ], @@ -6931,9 +6954,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.4.tgz", - "integrity": "sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.63.3.tgz", + "integrity": "sha512-BQhejF6ZXOpxbngiNTP12GCGQeaDVL2QXGeBVViKIYzFHM5RKxTxwUMB1fr1BeNFphFMpnRqC5QSXFSa4z6UQw==", "cpu": [ "s390x" ], @@ -6948,9 +6971,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.4.tgz", - "integrity": "sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.63.3.tgz", + "integrity": "sha512-SXagRwnI2Wlwlitllu59UK/nGVbD1CKPcNqDplHwIC4BqJcpXFjD32d1R/RbuISa95HdQrZM3/7v4bKiowFaLA==", "cpu": [ "x64" ], @@ -6965,9 +6988,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.4.tgz", - "integrity": "sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.63.3.tgz", + "integrity": "sha512-2IPozoEALRCziGqE8O9KMK60PMu5TS1huv4fwoeCexj+WjmcwFtX9CTOVbfXCUqcELAubEwRFPYlzb/WvwY2HQ==", "cpu": [ "x64" ], @@ -6982,9 +7005,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.4.tgz", - "integrity": "sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.63.3.tgz", + "integrity": "sha512-AoxqosUHT9IX54hFn2TiN6A7d6ZKTtE6pd2bqWtqkkNJ6HJGaU6FRouGX8L1O7R/ZwsnCnpQrHzb4pDEx+UHRQ==", "cpu": [ "x64" ], @@ -6996,9 +7019,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.4.tgz", - "integrity": "sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.63.3.tgz", + "integrity": "sha512-d+CaftKgmkFBzCwezMqqy1d0QNNYugqLCMcYVQWBy5SS2YfeMP8Q8ripkgx9O8IyBXXLHrJ+aaCV4U96usv6Yg==", "cpu": [ "arm64" ], @@ -7010,9 +7033,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.4.tgz", - "integrity": "sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.63.3.tgz", + "integrity": "sha512-xXlDF6nR1eOuXbdDy5Hl5fmtY7teUDevF/k0O7IPoZe4Tpmdv+lgdE5JRsnhQtt37ql9P0VF2kAN9a0OCZdo+Q==", "cpu": [ "arm64" ], @@ -7024,9 +7047,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.4.tgz", - "integrity": "sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.63.3.tgz", + "integrity": "sha512-YtXAgLN+JP7Ay6qG3eWhc7IHMQPzLc8r3uvhAvlJIoCz/4Q32+Bl9Fmnywidh8v1GOIMmymjovfqY9ETAtysvA==", "cpu": [ "ia32" ], @@ -7038,9 +7061,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.4.tgz", - "integrity": "sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.63.3.tgz", + "integrity": "sha512-WuWtSJRNo549vzcfZyEgfqb6zeSgn1F+UE5kQ+BCjzz0W4MGCjntUHkZVc1VRuAM7+ULaSyhiPxD1spyewFvkQ==", "cpu": [ "x64" ], @@ -7052,9 +7075,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.4.tgz", - "integrity": "sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.63.3.tgz", + "integrity": "sha512-+lIKX7O0+IGe7WuhATaAMMeT7B76vfhXH/l9wLQL+nvyhbw2ohYCKIdWL56JfDu75CWt5oKRP4QFH/jkMtBquA==", "cpu": [ "x64" ], @@ -7066,9 +7089,9 @@ ] }, "node_modules/@rollup/wasm-node": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.62.4.tgz", - "integrity": "sha512-GJFM5d4k5dSoY/oyILsKArplGvkss1DOURyXsl6IEM/X9RV3bQwqu9GY6tYfA97ZwIejfAguHa9fo1pGOQcyDg==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.63.3.tgz", + "integrity": "sha512-2oxd3PqJgukB5Gi2ETYI27FuIf9iKNfn6cSuyzRCDurIp37nuee36+sgkTNHXIREkOT8YAdBAdY91GUXkuex5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7087,9 +7110,9 @@ } }, "node_modules/@rushstack/node-core-library": { - "version": "5.23.3", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.23.3.tgz", - "integrity": "sha512-f6uuza7Um65bwsIJgf0MRs7IPA5IG+A+zs1AYGQvpZmLjtTGdfHowhQw4kwF0pPhJCrU4UHNhK8Qa6tLygYZCA==", + "version": "5.24.1", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.24.1.tgz", + "integrity": "sha512-ZlOrzv92MwnsCXA45qWfDj4L/kTasKghXezu+M2WmdtkbnXyPnZSCovfeBZx1Yc5qm+LkElbLw6IeSSWZDhZUg==", "dev": true, "license": "MIT", "dependencies": { @@ -7102,6 +7125,9 @@ "resolve": "~1.22.1", "semver": "~7.7.4" }, + "engines": { + "node": ">=20.9.0" + }, "peerDependencies": { "@types/node": "*" }, @@ -7155,16 +7181,19 @@ } }, "node_modules/@rushstack/terminal": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.24.2.tgz", - "integrity": "sha512-KB7PpvzDyKMw/RGU3TxOwxTs3OwZ4gq6+WHlTJN/JfQH4ezliNtWIqver78jTaAJyz/ZAAlJGH7a/M1WyFLFSw==", + "version": "0.24.4", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.24.4.tgz", + "integrity": "sha512-3fRBWK0IMY293lBx5ycgit1DTMUi+nhOjALHlrIad9hQsqzM9Ak+XdBI1gJ/tZPxW+LraeAc4SsmMdcOflBmAQ==", "dev": true, "license": "MIT", "dependencies": { - "@rushstack/node-core-library": "5.23.3", + "@rushstack/node-core-library": "5.24.1", "@rushstack/problem-matcher": "0.2.1", "supports-color": "~8.1.1" }, + "engines": { + "node": ">=20.9.0" + }, "peerDependencies": { "@types/node": "*" }, @@ -7175,27 +7204,30 @@ } }, "node_modules/@rushstack/ts-command-line": { - "version": "5.3.12", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-5.3.12.tgz", - "integrity": "sha512-Vg2n24arSf7JvUNga2DMHYTbxnVq9L5OtVCp4Gfr8YC/kmL/bmdR8FQhGcpMzMYNY9Vdw3+TaimG11Sf+z1Tpw==", + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-5.3.14.tgz", + "integrity": "sha512-lT2JKZk2dukBMp4GFOh4RaDfVzpZehGgQOGpzpSliUn317NgEmOOCXyd7/d0eU46HHsbRxizP83GAm39s0lAlg==", "dev": true, "license": "MIT", "dependencies": { - "@rushstack/terminal": "0.24.2", + "@rushstack/terminal": "0.24.4", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" + }, + "engines": { + "node": ">=20.9.0" } }, "node_modules/@schematics/angular": { - "version": "21.2.20", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.20.tgz", - "integrity": "sha512-D0MFRofD144Gn+LMPgrRQKazv3sNxfB11kbdU19yN8JyXyRqmB3C8/k3lLA/+LyXVeyLwzIKs7Cw/PSzPUaAxA==", + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.24.tgz", + "integrity": "sha512-eGBr4Yhg/A8Lt8QGtWxmXAyKboX8QBwbDG1hSyApQfHAh9iNFbV7mgWSmk0qPWvRJM38s0t3EEkEg79QZ98dWQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "21.2.20", - "@angular-devkit/schematics": "21.2.20", + "@angular-devkit/core": "21.2.24", + "@angular-devkit/schematics": "21.2.24", "jsonc-parser": "3.3.1" }, "engines": { @@ -7205,13 +7237,13 @@ } }, "node_modules/@schematics/angular/node_modules/@angular-devkit/schematics": { - "version": "21.2.20", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.20.tgz", - "integrity": "sha512-XH0BtcqSwHlyLRzvbZccSEe5Hcl7Yex8fXfj3gMVBB5g+KBUm2OGtGN3lDOl5BtrwrZBVnNNXkg0ehNrWzxVgw==", + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.24.tgz", + "integrity": "sha512-mLOme2vfbLrHFmMyM6ybPuGCnCvPiemXWdHnptY2Q7Hzum72DabfgtTNsrMcI2F5zrQV2DDQunNjC5cXqtq4/w==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "21.2.20", + "@angular-devkit/core": "21.2.24", "jsonc-parser": "3.3.1", "magic-string": "0.30.21", "ora": "9.3.0", @@ -7257,9 +7289,9 @@ } }, "node_modules/@sigstore/protobuf-specs": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.5.1.tgz", - "integrity": "sha512-/ScWUhhoFasJsSRGTVBwId1loQjjnjAfE4djL6ZhrXRpNCmPTnUKF5Jokd58ILseOMjzET3UrMOtJPS9sYeI0g==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.5.2.tgz", + "integrity": "sha512-SQqvFMt4V78fdjcDdYX6HbiVSOR4QK3ZgwCa2KOsopAgPIHy1rU5UDUmzLl02r5oyyaYcYHR1hpwDRk/yUe+Mw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -7374,9 +7406,9 @@ "license": "MIT" }, "node_modules/@ts-morph/common/node_modules/brace-expansion": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", - "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.7.tgz", + "integrity": "sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==", "dev": true, "license": "MIT", "dependencies": { @@ -7424,9 +7456,9 @@ } }, "node_modules/@tybys/wasm-util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", - "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.4.tgz", + "integrity": "sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==", "dev": true, "license": "MIT", "optional": true, @@ -7609,9 +7641,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.13.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz", - "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==", + "version": "24.13.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.6.tgz", + "integrity": "sha512-SGrw/h3KPFshy3OE6ZL53LMBG5vGQQ8/gIpiqz/kRZhPJ7HgwCEs8LBuNtWLa8dvGZVpSF7+Bf+c11HUrCb/yg==", "dev": true, "license": "MIT", "dependencies": { @@ -7714,17 +7746,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.67.0.tgz", - "integrity": "sha512-Un7Heoyj65NREbKAyIrFxeM143NZpExWmy1Nep4DLeQOeLlTeumPjoNKnBrU5D5moWXbPJgRa5Uwcdu0faVNGQ==", + "version": "8.70.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.70.0.tgz", + "integrity": "sha512-/v8HZt6RlyIZxB3ntehELOcUcfxKPVGWXnQdJuHRmzrqgF8nQypcC/oxGW+Ot4VGKDq81XugPKxx0n5PBtf9PA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.67.0", - "@typescript-eslint/type-utils": "8.67.0", - "@typescript-eslint/utils": "8.67.0", - "@typescript-eslint/visitor-keys": "8.67.0", + "@typescript-eslint/scope-manager": "8.70.0", + "@typescript-eslint/type-utils": "8.70.0", + "@typescript-eslint/utils": "8.70.0", + "@typescript-eslint/visitor-keys": "8.70.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -7737,22 +7769,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.67.0", + "@typescript-eslint/parser": "^8.70.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.67.0.tgz", - "integrity": "sha512-fUBfTuuEulWqX6V8+O3PtScV01tzYYRUDTAirHFKoRAt7nOzoGiPt0M/bB47wWNy0coOOcgEwAMUtBpykMxl6w==", + "version": "8.70.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.70.0.tgz", + "integrity": "sha512-zYvrmj9Yxd63UGaXw+kdt6A0F0s0qveJyuatIM77bYC2DE4pgmg7a50u8LR7PRtXd0x+h+Tl3eXabGm06SWd3Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.67.0", - "@typescript-eslint/types": "8.67.0", - "@typescript-eslint/typescript-estree": "8.67.0", - "@typescript-eslint/visitor-keys": "8.67.0", + "@typescript-eslint/scope-manager": "8.70.0", + "@typescript-eslint/types": "8.70.0", + "@typescript-eslint/typescript-estree": "8.70.0", + "@typescript-eslint/visitor-keys": "8.70.0", "debug": "^4.4.3" }, "engines": { @@ -7768,14 +7800,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.67.0.tgz", - "integrity": "sha512-cvE8c7ulYeXN9fYuszhCeCsbzyVEXuhrRCybnBre7TUmqb5nRmBfQAwCj0O3WJFDeyAZt4VYv51vMCC9LHSdYw==", + "version": "8.70.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.70.0.tgz", + "integrity": "sha512-hFHbTNqhU9G+2eKFXCBVb1tjFT/LceiJ4+HfLO4pTpDI0KHi6iajpcFFkaSQ9gXmCh7n82A0PthaayEdN6mspQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.67.0", - "@typescript-eslint/types": "^8.67.0", + "@typescript-eslint/tsconfig-utils": "^8.70.0", + "@typescript-eslint/types": "^8.70.0", "debug": "^4.4.3" }, "engines": { @@ -7790,14 +7822,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.67.0.tgz", - "integrity": "sha512-EgvsleTwS4E+WzzSvem8fAUubLwatMNF1B5hHSLQxcvs7q2dtRhGyujHwLJSYlG41niJ7GP24Aha2+0mb1b2kg==", + "version": "8.70.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.70.0.tgz", + "integrity": "sha512-8nP3Kwh5hlgZ4FicGvmznAmJe8UL4sdU8tLukrPaMuQmDuk4Y8xYfzu/aYZW4xT2JCgc7H/TpDI5cGlxcWJSqQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.67.0", - "@typescript-eslint/visitor-keys": "8.67.0" + "@typescript-eslint/types": "8.70.0", + "@typescript-eslint/visitor-keys": "8.70.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7808,9 +7840,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.67.0.tgz", - "integrity": "sha512-vV+LUSv5njUWsknE71fqKTlXUva+R76SaeORd6Zojcunk/6DvKFXONU3BrAs2H49mbygUXt6gbYunzwqNwlhdg==", + "version": "8.70.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.70.0.tgz", + "integrity": "sha512-adnkeeNq9Sq1sUf4+FRVc0KdgYghzsgFpZSQVZVvY0LCuUuN0FnQgyGzCJeC4fW1cdXseBAjU2EOqUIjbNcZUw==", "dev": true, "license": "MIT", "engines": { @@ -7825,15 +7857,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.67.0.tgz", - "integrity": "sha512-aVWDXbRmdXO9siTfX4ditQI1T9+zVcNazT48EJCD0v40/9RIFoUgZ05CmGEq9H2gixRpjUn/iplwvlcvutJW/Q==", + "version": "8.70.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.70.0.tgz", + "integrity": "sha512-NUMKIhYVaVIVLnRL9CRt+VVcuLgSHUCpXn4/+K8wql+vdInUzvx8BjUO1oJ7cG9shjFJKtF8F8Hh2kCh3/KBVw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.67.0", - "@typescript-eslint/typescript-estree": "8.67.0", - "@typescript-eslint/utils": "8.67.0", + "@typescript-eslint/types": "8.70.0", + "@typescript-eslint/typescript-estree": "8.70.0", + "@typescript-eslint/utils": "8.70.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -7850,9 +7882,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.67.0.tgz", - "integrity": "sha512-sBtgslww8nsMYUjhdPBiSyUqSzT8uR6g93A2QXnQC8+cGdjz0CyaOdqHDRJb1AtORbZCNUJBBeFA/tNR2uQmww==", + "version": "8.70.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.70.0.tgz", + "integrity": "sha512-asTOIYhDg4zdzOScCyaytrsV3cR6B4ecPQlXw/dJIm7J/MZTtCtfVII9JD8Geh4jTCrK/Xe6cg5UevoleMcoJQ==", "dev": true, "license": "MIT", "engines": { @@ -7864,16 +7896,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.67.0.tgz", - "integrity": "sha512-EKQBCE9yNlRJYm7jdTW5AhDacDUmSwQb0FAJAmK2EKYrNXIsa2vxcSZx6PvJ/dEdI6lS+Y9W+EXckLj0iPFGcw==", + "version": "8.70.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.70.0.tgz", + "integrity": "sha512-d9NmHMPEKQ7QCLLm1jI3zmoQBwT5KwFYjXBJ9ymZfKCUU+5rmTRykKAFvH5Qn/ZCds3CEAFS9OC9M/jkl0X2bA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.67.0", - "@typescript-eslint/tsconfig-utils": "8.67.0", - "@typescript-eslint/types": "8.67.0", - "@typescript-eslint/visitor-keys": "8.67.0", + "@typescript-eslint/project-service": "8.70.0", + "@typescript-eslint/tsconfig-utils": "8.70.0", + "@typescript-eslint/types": "8.70.0", + "@typescript-eslint/visitor-keys": "8.70.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -7892,16 +7924,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.67.0.tgz", - "integrity": "sha512-U9D1FdwEWBwok3hxxSdhclMb0twvt9QnjIQ0VfQ1AiX2epnpSgv2ubVDsayOFyY8K6FX+AQ7E0FKWVG3iKsj1A==", + "version": "8.70.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.70.0.tgz", + "integrity": "sha512-oZmtKJz/4fufZ2p3+Cn3ijEojcdfR+1zYDH2xKYrEly0dR/Q/1xUPRCOlKGxod78nWlU2UnDe09GZ3TaknBFGA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.67.0", - "@typescript-eslint/types": "8.67.0", - "@typescript-eslint/typescript-estree": "8.67.0" + "@typescript-eslint/scope-manager": "8.70.0", + "@typescript-eslint/types": "8.70.0", + "@typescript-eslint/typescript-estree": "8.70.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7916,13 +7948,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.67.0.tgz", - "integrity": "sha512-fkv8dHRDqfGtTHuJeebdrQ7cX6Ad4WAS00rgHh9UGvMycF1mjBfsxry1XsLIFhWZ6Judlh6UdzK+TYlbpCXgnA==", + "version": "8.70.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.70.0.tgz", + "integrity": "sha512-BoC8PiO4Hkdo0TVJh9Ntxr5MxPDI7/oFsrygN5ADelFSeXG/qgNuucIGA+L5Z6JpPTE/uRfcTWtscjbUaufepQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/types": "8.70.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -7960,15 +7992,15 @@ } }, "node_modules/@vitest/browser": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-4.1.10.tgz", - "integrity": "sha512-UDwuWGwXj646CBx/bQHOaJSX7np0I8JL/UKQYa1e4QrVHH8VdWtx8eaOuf8sy0ShwDgR6NjJAsp5eF6vjF6qng==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-4.1.11.tgz", + "integrity": "sha512-bwMovvAeuTFOK5kIFevw4VEf+1gVEICv4SYK4k3knJOxl6b1zEWud8mYKD73e1B0odAn174h1MofURy2TPWf3w==", "dev": true, "license": "MIT", "dependencies": { "@blazediff/core": "1.9.1", - "@vitest/mocker": "4.1.10", - "@vitest/utils": "4.1.10", + "@vitest/mocker": "4.1.11", + "@vitest/utils": "4.1.11", "magic-string": "^0.30.21", "pngjs": "^7.0.0", "sirv": "^3.0.2", @@ -7979,18 +8011,18 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "4.1.10" + "vitest": "4.1.11" } }, "node_modules/@vitest/browser-playwright": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-4.1.10.tgz", - "integrity": "sha512-nMoXGEiRpT7m3W7NsbvrM2aKNwiNHZf+zEpUCvMteGjZFvfT96Q9fh7QyB98dvDWXiKvrLxA7bJ1mCOOv+JQPw==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-4.1.11.tgz", + "integrity": "sha512-riLBxPqwnJ0lWs2DN2WeUfYeKLoAjbP2Xx8cLQdSddzMi20sksIa6K2mPz79DyMZKKVKH2ksOC2yJvtNcZg8cg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/browser": "4.1.10", - "@vitest/mocker": "4.1.10", + "@vitest/browser": "4.1.11", + "@vitest/mocker": "4.1.11", "tinyrainbow": "^3.1.0" }, "funding": { @@ -7998,7 +8030,7 @@ }, "peerDependencies": { "playwright": "*", - "vitest": "4.1.10" + "vitest": "4.1.11" }, "peerDependenciesMeta": { "playwright": { @@ -8017,16 +8049,16 @@ } }, "node_modules/@vitest/expect": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.10.tgz", - "integrity": "sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.11.tgz", + "integrity": "sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==", "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.1.10", - "@vitest/utils": "4.1.10", + "@vitest/spy": "4.1.11", + "@vitest/utils": "4.1.11", "chai": "^6.2.2", "tinyrainbow": "^3.1.0" }, @@ -8035,13 +8067,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.10.tgz", - "integrity": "sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.11.tgz", + "integrity": "sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.1.10", + "@vitest/spy": "4.1.11", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, @@ -8072,9 +8104,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.10.tgz", - "integrity": "sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.11.tgz", + "integrity": "sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==", "dev": true, "license": "MIT", "dependencies": { @@ -8085,13 +8117,13 @@ } }, "node_modules/@vitest/runner": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.10.tgz", - "integrity": "sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.11.tgz", + "integrity": "sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.1.10", + "@vitest/utils": "4.1.11", "pathe": "^2.0.3" }, "funding": { @@ -8099,14 +8131,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.10.tgz", - "integrity": "sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.11.tgz", + "integrity": "sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.1.10", - "@vitest/utils": "4.1.10", + "@vitest/pretty-format": "4.1.11", + "@vitest/utils": "4.1.11", "magic-string": "^0.30.21", "pathe": "^2.0.3" }, @@ -8125,9 +8157,9 @@ } }, "node_modules/@vitest/spy": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.10.tgz", - "integrity": "sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.11.tgz", + "integrity": "sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==", "dev": true, "license": "MIT", "funding": { @@ -8135,13 +8167,13 @@ } }, "node_modules/@vitest/utils": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.10.tgz", - "integrity": "sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.11.tgz", + "integrity": "sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.1.10", + "@vitest/pretty-format": "4.1.11", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" }, @@ -8551,13 +8583,13 @@ } }, "node_modules/angular-eslint/node_modules/@angular-devkit/schematics": { - "version": "21.2.20", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.20.tgz", - "integrity": "sha512-XH0BtcqSwHlyLRzvbZccSEe5Hcl7Yex8fXfj3gMVBB5g+KBUm2OGtGN3lDOl5BtrwrZBVnNNXkg0ehNrWzxVgw==", + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.24.tgz", + "integrity": "sha512-mLOme2vfbLrHFmMyM6ybPuGCnCvPiemXWdHnptY2Q7Hzum72DabfgtTNsrMcI2F5zrQV2DDQunNjC5cXqtq4/w==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "21.2.20", + "@angular-devkit/core": "21.2.24", "jsonc-parser": "3.3.1", "magic-string": "0.30.21", "ora": "9.3.0", @@ -8619,9 +8651,9 @@ } }, "node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", "dev": true, "license": "MIT", "engines": { @@ -8832,9 +8864,9 @@ } }, "node_modules/b4a": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.1.tgz", - "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.9.0.tgz", + "integrity": "sha512-dpfcF9fDNR6++cthXR67iyhgqWy9CBouAvIWhIntzBG6cvK/cnIPiZQjBwi/ZqjjBEDGfoNDtmB0kTjroOJ3pQ==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -8941,9 +8973,9 @@ } }, "node_modules/bare-events": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.9.1.tgz", - "integrity": "sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.9.2.tgz", + "integrity": "sha512-AIPKioV7/Y/8KfZ3AAhjPJxLLbY49S64Ym5DakZlUg75qQiTgUq9hEJoEwa4eUezPUlXRy/i5NpsKvo9jgKmoA==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -8977,9 +9009,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.11.13", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.13.tgz", - "integrity": "sha512-k9HNuUVMlqVjQ9UHzfPjIqiDbWw7WqT1AoT7GL8VwvF3r0ZfArtgiSPAlmupyNquNgOJHTuH4CKYf8ttMTWBTQ==", + "version": "2.11.25", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.25.tgz", + "integrity": "sha512-gMmEShwwq7FJqMwvfRwvCl00v4kN+KOfJqXn+f4nrufak5gNHJOksd/60Dvjuz7sI8Y5WiSFBa8FEYr+zoyqCw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -9106,9 +9138,9 @@ } }, "node_modules/body-parser/node_modules/content-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", - "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", "dev": true, "license": "MIT", "engines": { @@ -9138,9 +9170,9 @@ "license": "ISC" }, "node_modules/brace-expansion": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", - "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz", + "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9164,9 +9196,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", - "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.0.tgz", + "integrity": "sha512-3GSvyjvDI4Dur1Meg2BekJquu5uF+9R9a1+5M1Mde192eZoXbeXjzgOsgqPS2V8D5wrrip0gR5Hf/GhWQ9ZzaA==", "dev": true, "funding": [ { @@ -9184,11 +9216,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.11.12", - "caniuse-lite": "^1.0.30001809", - "electron-to-chromium": "^1.5.402", - "node-releases": "^2.0.53", - "update-browserslist-db": "^1.3.0" + "baseline-browser-mapping": "^2.11.23", + "caniuse-lite": "^1.0.30001810", + "electron-to-chromium": "^1.5.427", + "node-releases": "^2.0.55", + "update-browserslist-db": "^1.3.3" }, "bin": { "browserslist": "cli.js" @@ -9288,9 +9320,9 @@ } }, "node_modules/cacache/node_modules/lru-cache": { - "version": "11.5.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", - "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "version": "11.5.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.3.tgz", + "integrity": "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -9311,16 +9343,6 @@ "qified": "^0.10.1" } }, - "node_modules/cacheable/node_modules/keyv": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", - "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@keyv/serialize": "^1.1.1" - } - }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -9363,9 +9385,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001809", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz", - "integrity": "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==", + "version": "1.0.30001810", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", + "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", "dev": true, "funding": [ { @@ -9676,9 +9698,9 @@ "license": "MIT" }, "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.10.0.tgz", + "integrity": "sha512-AidJptpBJmjTclAp9BkLwJi0T93fo5epJnbaZslpg6QVzpHjAiveF55mE9AcUJiGMqRHgMDY8soMsQtuNYMHfw==", "dev": true, "license": "MIT" }, @@ -9720,15 +9742,16 @@ } }, "node_modules/compression": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", - "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.2.tgz", + "integrity": "sha512-o8vI5RE5A6EVVOd9o41jKp41aJom+QTEO/Bx8MYNjexMo/Bv2WOjUfZr+aL0WnYSgymUy6zeguqLTsIhV0gMvQ==", "dev": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", "debug": "2.6.9", + "destroy": "1.2.0", "negotiator": "~0.6.4", "on-headers": "~1.1.0", "safe-buffer": "5.2.1", @@ -9736,6 +9759,10 @@ }, "engines": { "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/compression/node_modules/debug": { @@ -9848,13 +9875,16 @@ } }, "node_modules/copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", "dev": true, "license": "MIT", "dependencies": { - "is-what": "^3.14.1" + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" }, "funding": { "url": "https://github.com/sponsors/mesqueeb" @@ -10121,9 +10151,9 @@ "license": "MIT" }, "node_modules/default-browser": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", - "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.1.tgz", + "integrity": "sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw==", "dev": true, "license": "MIT", "dependencies": { @@ -10341,9 +10371,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.405", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.405.tgz", - "integrity": "sha512-bNglH7lPH5l+yHOes7Zr4VqxhOy4BQ9ZBUX4VdoFgxMpzJk7W1ZoO3Vgd9Pxa9PyjQ76sfm2aKH/nzEcCNRlew==", + "version": "1.5.433", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.433.tgz", + "integrity": "sha512-5lCAbyZBjtmUt/RAGHRqrL2q0oEFRThDAsZHHDn9XHa89Qw7gMYOeSicBTy+AHfvo0r6vwsZvqNJTQIQy1BLzA==", "dev": true, "license": "ISC" }, @@ -10385,9 +10415,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.24.5", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz", - "integrity": "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==", + "version": "5.25.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.25.1.tgz", + "integrity": "sha512-nGXts5znJzmWPu+mIE9izCOzdg63oJca2mDzGWWTth7sr4aCToKcoyFVBQwN75Ij5Pf6p510EwkTqViTRzDV+w==", "dev": true, "license": "MIT", "dependencies": { @@ -10479,9 +10509,9 @@ } }, "node_modules/es-module-lexer": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz", - "integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz", + "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==", "dev": true, "license": "MIT" }, @@ -10584,9 +10614,9 @@ } }, "node_modules/eslint": { - "version": "10.8.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.8.1.tgz", - "integrity": "sha512-wqA7W2jbsC/BnV9Iv1UZpKVFkO1AdNoSmYW8NWG4HNOBbkAMvIqDZ27pI2f07dqn583NcIC44ckjAcOXDL1QbQ==", + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.11.0.tgz", + "integrity": "sha512-P7a6UEEqb9G95MYAtqkmsTbVXIYyzIfl6NGOIJk162PaahFxFyeGcrlXYFSiagECg4sEm8IseJdZBKR3rx6MsQ==", "dev": true, "license": "MIT", "workspaces": [ @@ -10598,7 +10628,7 @@ "@eslint/config-array": "^0.23.5", "@eslint/config-helpers": "^0.7.0", "@eslint/core": "^1.2.1", - "@eslint/plugin-kit": "^0.7.2", + "@eslint/plugin-kit": "^0.7.3", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -10613,7 +10643,7 @@ "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", + "file-entry-cache": "11.1.5 || >11.1.6 <12", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", @@ -10964,9 +10994,9 @@ } }, "node_modules/express-rate-limit": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.6.2.tgz", - "integrity": "sha512-YH4ru+eOJxQABscKFfRCy9R7x9QFGdezclVMwwgFFndzS2Xnm0uo6B0ABZsLhcpeptGv2qvuJVWlQr9gQZoC3A==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.7.0.tgz", + "integrity": "sha512-hOwV7WOxXfjRpAM1DSJWZDXx3GhplwD8IfwuwvogD8i1Qnkgosw/H45s4ZnFAUHDAhPjlY9hLBvJhKmGMyY26g==", "dev": true, "license": "MIT", "dependencies": { @@ -11049,9 +11079,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.7.tgz", - "integrity": "sha512-dOvZVzjdZdz7phd9v6jCbwxrBW3fK6n8Rc0CtdmM4bumzMnxywBYhuph6J819RRw/ku+rLbelwfMunktuzVVHg==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz", + "integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==", "dev": true, "funding": [ { @@ -11076,9 +11106,9 @@ } }, "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz", + "integrity": "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==", "dev": true, "license": "ISC", "dependencies": { @@ -11117,16 +11147,13 @@ } }, "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "version": "11.1.5", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.5.tgz", + "integrity": "sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" + "flat-cache": "^6.1.23" } }, "node_modules/fill-range": { @@ -11265,17 +11292,15 @@ } }, "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "version": "6.1.23", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.23.tgz", + "integrity": "sha512-f++BY9pTk+983xK1FLzlLpmM0i0z+jHmx3QESGkURMXujQZz1k5wzwX6hjnQ8goaD0B+sYnDK1yZ6MTyZfUaqA==", "dev": true, "license": "MIT", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" + "cacheable": "^2.5.0", + "flatted": "^3.4.2", + "hookified": "^1.15.0" } }, "node_modules/flatpickr": { @@ -11457,9 +11482,9 @@ } }, "node_modules/get-east-asian-width": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", - "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.7.0.tgz", + "integrity": "sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==", "dev": true, "license": "MIT", "engines": { @@ -11560,9 +11585,9 @@ } }, "node_modules/glob-to-regex.js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", - "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.3.1.tgz", + "integrity": "sha512-zhWhMRsgnOym+1txhUmYJGD6eUsbUdrZv55gCYKuJX8t2p3+M8My23PD09bEIsreGUs5pnSa/idmcfp2/IlqGg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -11714,9 +11739,9 @@ } }, "node_modules/globby": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-16.2.3.tgz", - "integrity": "sha512-VZX7TV7jmd/pn71vdnLKtgwy1IWqc3KjI9x1/UtPkwoKk5fKrNLY30ltDe3cAM5xruIN7YuuaulFt133jRrKZg==", + "version": "16.2.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-16.2.4.tgz", + "integrity": "sha512-c8B/VNLmxRcmqqenRA9t+9IyOjf9+V6lTxPaUJLqOCONdQkWZ0ETYgX0qbtJqPsgCNusT9MZ5Jeidw8Eb9tn2g==", "dev": true, "license": "MIT", "dependencies": { @@ -11724,6 +11749,7 @@ "fast-glob": "^3.3.3", "ignore": "^7.0.5", "is-path-inside": "^4.0.0", + "micromatch": "^4.0.8", "slash": "^5.1.0", "unicorn-magic": "^0.4.0" }, @@ -12002,9 +12028,9 @@ } }, "node_modules/hono": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.1.tgz", - "integrity": "sha512-kdJoFVv2xmayw6cY09H7AbMJMt8Jn5jdlEdXsP7AGBdF2DIptVlKlOLKXP41yPip4/a3yQPv9gVcJYI8YY04dw==", + "version": "4.13.8", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.8.tgz", + "integrity": "sha512-/Gng7NfoykZl2pjukW5Z6+8Yxm3BPRf86GTbQnt0SbySkvax4fyL4H3HhY1cCpBGmiW9XDRFzRV+CXK2W8QudQ==", "dev": true, "license": "MIT", "engines": { @@ -12032,9 +12058,9 @@ } }, "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "11.5.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", - "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "version": "11.5.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.3.tgz", + "integrity": "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -12287,20 +12313,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/immutable": { "version": "5.1.9", "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", @@ -12394,9 +12406,9 @@ } }, "node_modules/ip-address": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.5.0.tgz", - "integrity": "sha512-R5SnVLJmgYYvf2F2ZgwSBnelz5G4q5AxIC277GDfUaNbrZKNANcBC7RHqYYePlszf4kBolVkJauG0ZjHHFh55g==", + "version": "10.7.2", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.2.tgz", + "integrity": "sha512-7H/2gFSIitxc0hG3nOI1glS8QLo/EHBFFLk8vEUjXY/xu0AdL8jZ9U1IzO2PUm0d2D/ofQcAifb0g6OBkt8U7w==", "dev": true, "license": "MIT", "engines": { @@ -12448,13 +12460,13 @@ } }, "node_modules/is-core-module": { - "version": "2.16.2", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", - "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.17.0.tgz", + "integrity": "sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.3" + "hasown": "^2.0.4" }, "engines": { "node": ">= 0.4" @@ -12623,9 +12635,9 @@ } }, "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.1.0.tgz", + "integrity": "sha512-bUi/yjmtKYcRVUtWRGr0UA6xEFh2I6zWUwMrUXB3s7bmYCaZ8a+0ZsTRkrawh/mzlSD1Y0Ph8bp/U+TvBpWDNw==", "dev": true, "license": "MIT", "engines": { @@ -12689,11 +12701,17 @@ } }, "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } }, "node_modules/is-windows": { "version": "1.0.2", @@ -12822,9 +12840,9 @@ "license": "MIT" }, "node_modules/jose": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.8.tgz", - "integrity": "sha512-Bsdjwm3Qsd/P0jR+BHDe3LytDfY7WBq2HmCCLIwuVRHMuEC9ae7/R474GIUdF1NgCyZjzVo/A9DOiOBtXq8ZoQ==", + "version": "6.2.12", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.12.tgz", + "integrity": "sha512-9NiFmJEex0sy2Dk58j2UGBSHgUs2ypF9eZSu4L6vjOX3Dp96Sw1F3uL+H+D1sx02jZZdzUT0HgvCy59CuvXcWw==", "dev": true, "license": "MIT", "funding": { @@ -12839,9 +12857,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", - "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", "dev": true, "funding": [ { @@ -12881,13 +12899,6 @@ "node": ">=6" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, "node_modules/json-parse-even-better-errors": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", @@ -12962,9 +12973,10 @@ "license": "MIT" }, "node_modules/jsrsasign": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-11.1.3.tgz", - "integrity": "sha512-nPnK5D/4lv0Dwr7TlzrKtAd8JlLZwFTqTUUB3NQCbtdobcRcohGFxjbPySDVh74iWUudcCsapYT6OxoyhJLhhA==", + "version": "11.1.5", + "resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-11.1.5.tgz", + "integrity": "sha512-i6mAjey0/4UQmlOaNS2vROl8EkWV8Ei436reJAby2OPQ3lF6uXSs1VYpnM8hndmmCMFIzNc04Uw2GF+0JVLFbg==", + "deprecated": "This package is no longer maintained.", "license": "MIT", "peer": true }, @@ -12989,13 +13001,13 @@ } }, "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", "dev": true, "license": "MIT", "dependencies": { - "json-buffer": "3.0.1" + "@keyv/serialize": "^1.1.1" } }, "node_modules/kind-of": { @@ -13040,29 +13052,28 @@ } }, "node_modules/less": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/less/-/less-4.4.2.tgz", - "integrity": "sha512-j1n1IuTX1VQjIy3tT7cyGbX7nvQOsFLoIqobZv4ttI5axP923gA44zUj6miiA6R5Aoms4sEGVIIcucXUbRI14g==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.9.0.tgz", + "integrity": "sha512-umRhrCH7fCi8Uj2RcwKjJdvUORTjeWqkdKx0LbcZvjIwsAVsnIAGcxHaqowPeBFBjQuWOeC/bve0AlpFzF/+SQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" + "copy-anything": "^3.0.5", + "parse-node-version": "^1.0.1" }, "bin": { "lessc": "bin/lessc" }, "engines": { - "node": ">=14" + "node": ">=18" }, "optionalDependencies": { "errno": "^0.1.1", "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", + "make-dir": "^5.1.0", "mime": "^1.4.1", "needle": "^3.1.0", + "probe-image-size": "^7.2.3", "source-map": "~0.6.0" } }, @@ -13326,6 +13337,14 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -13465,29 +13484,17 @@ } }, "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-5.1.0.tgz", + "integrity": "sha512-IfpFq6UM39dUNiphpA6uDezNx/AvWyhwfICWPR3t1VspkgkMZrL+Rk1RbN1bx+aeNYwOrqGJgEgV3yotk+ZUVw==", "dev": true, "license": "MIT", "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, "engines": { - "node": ">=6" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/make-fetch-happen": { @@ -13567,23 +13574,23 @@ } }, "node_modules/memfs": { - "version": "4.68.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.68.1.tgz", - "integrity": "sha512-OD+IDRUvIxu3QHL+nFm9gdyugInD27FDJ+sl4B5QgomPHXMlbw+GP918P8VNKu2FkNlVeqBkpzkwROpamVifRw==", + "version": "4.78.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.78.1.tgz", + "integrity": "sha512-SkSlK6DZbzekBoiu0mcHUx9RRPnsBdaKQ36u8F3HvYZm/lRiD34YabQ2Xr76r+zYENzRPFKBsanAZPSl+r3Nqg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.68.1", - "@jsonjoy.com/fs-fsa": "4.68.1", - "@jsonjoy.com/fs-node": "4.68.1", - "@jsonjoy.com/fs-node-builtins": "4.68.1", - "@jsonjoy.com/fs-node-to-fsa": "4.68.1", - "@jsonjoy.com/fs-node-utils": "4.68.1", - "@jsonjoy.com/fs-print": "4.68.1", - "@jsonjoy.com/fs-snapshot": "4.68.1", + "@jsonjoy.com/fs-core": "4.78.1", + "@jsonjoy.com/fs-fsa": "4.78.1", + "@jsonjoy.com/fs-node": "4.78.1", + "@jsonjoy.com/fs-node-builtins": "4.78.1", + "@jsonjoy.com/fs-node-to-fsa": "4.78.1", + "@jsonjoy.com/fs-node-utils": "4.78.1", + "@jsonjoy.com/fs-print": "4.78.1", + "@jsonjoy.com/fs-snapshot": "4.78.1", "@jsonjoy.com/json-pack": "^1.11.0", "@jsonjoy.com/util": "^1.9.0", - "glob-to-regex.js": "^1.0.1", + "glob-to-regex.js": "^1.3.1", "thingies": "^2.5.0", "tree-dump": "^1.0.3", "tslib": "^2.0.0" @@ -14005,9 +14012,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.18", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", - "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "version": "3.3.19", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", + "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", "dev": true, "funding": [ { @@ -14063,13 +14070,34 @@ } }, "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz", + "integrity": "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==", "dev": true, "license": "MIT", + "dependencies": { + "content-type": "^2.1.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/negotiator/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/neo-async": { @@ -14204,9 +14232,9 @@ } }, "node_modules/node-gyp/node_modules/undici": { - "version": "6.28.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz", - "integrity": "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==", + "version": "6.28.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.1.tgz", + "integrity": "sha512-zWpdTVD54H48CIybL0rWQ3ukpb9d23wM7eH5RtfdmeP70cWHNjtfo7P4vZX+5CoDcO53J4Pu5uXp7lNfjc6DRA==", "dev": true, "license": "MIT", "engines": { @@ -14230,9 +14258,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.53", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.53.tgz", - "integrity": "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==", + "version": "2.0.56", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.56.tgz", + "integrity": "sha512-x0InOIyzgdk+eyaWaRJFH5snEtiImgBgblZ2CyPrLmqqcuMQkEvcDPHbzqbD8eDsSeJbVOjn+crzyzHaM4D+/A==", "dev": true, "license": "MIT", "engines": { @@ -14453,9 +14481,9 @@ "license": "MIT" }, "node_modules/obug": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", - "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.2.1.tgz", + "integrity": "sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==", "dev": true, "funding": [ "https://github.com/sponsors/sxzz", @@ -14648,9 +14676,9 @@ } }, "node_modules/p-map": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.6.tgz", - "integrity": "sha512-I4Prw6ivkd6p8PiYR1tXASOAOBzIJwu0TB7fqaX0c/8c3QAehNYmX57EijyGGGBt3c/BIowGwV03RVBtXvHEVg==", + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.8.tgz", + "integrity": "sha512-MitaVsCuCFIvOLLPIU7NnfrZvS9H9h7kwMUkDo+T2pEISaJD48IV9S8iIdXB7PsvvdxyYcsSTTrr90XKsbulNw==", "dev": true, "license": "MIT", "engines": { @@ -14838,9 +14866,9 @@ } }, "node_modules/parse5/node_modules/entities": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", - "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.1.0.tgz", + "integrity": "sha512-kxL7msIffSuh9aaFAMD7rxAIuTRMAHMeBtgHW2yUdWw732ZNh4MehkF2gdjvtdmikkaIP9bFDDJOPlsvm7avrA==", "license": "BSD-2-Clause", "engines": { "node": ">=20.19.0" @@ -14934,9 +14962,9 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.5.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", - "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "version": "11.5.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.3.tgz", + "integrity": "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -14981,17 +15009,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, "node_modules/piscina": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.2.0.tgz", @@ -15050,29 +15067,26 @@ } }, "node_modules/playwright": { - "version": "1.62.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.62.1.tgz", - "integrity": "sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==", + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.63.0.tgz", + "integrity": "sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==", "dev": true, "license": "Apache-2.0", "peer": true, "dependencies": { - "playwright-core": "1.62.1" + "playwright-core": "1.63.0" }, "bin": { "playwright": "cli.js" }, "engines": { "node": ">=20" - }, - "optionalDependencies": { - "fsevents": "2.3.2" } }, "node_modules/playwright-core": { - "version": "1.62.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.62.1.tgz", - "integrity": "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==", + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz", + "integrity": "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==", "dev": true, "license": "Apache-2.0", "peer": true, @@ -15083,22 +15097,6 @@ "node": ">=20" } }, - "node_modules/playwright/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/pngjs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", @@ -15110,9 +15108,9 @@ } }, "node_modules/postcss": { - "version": "8.5.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", - "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", + "version": "8.5.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", + "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", "dev": true, "funding": [ { @@ -15130,7 +15128,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.17", + "nanoid": "^3.3.18", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -15241,9 +15239,9 @@ } }, "node_modules/postcss-safe-parser": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", - "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.1.0.tgz", + "integrity": "sha512-1WzZxRLaAFwEh6Do+zyGpjWV3nGJNxxhuh7Ubu/q1ICImMgZJnLwhoaEpRbG4pJppp2Y1ncL9ffA2f+LhrefQg==", "dev": true, "funding": [ { @@ -15295,9 +15293,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.5.tgz", - "integrity": "sha512-KvvtD7SrlBP7dlgkBghEE3r84CABm5SmV2aNcG4oCA+qDnJ/tvKonFVvwWAyyWUEwxuNawdfEAZKP9zM3oZ2Uw==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.6.tgz", + "integrity": "sha512-7qASPzhKF2l2KLboRZux8CCTRMdGiV08vWmyKzPz22qZ7ZjQBOeY7rNzNoCLSUiftJ7HUq0GERHmxw/t0dCdMw==", "dev": true, "license": "MIT", "dependencies": { @@ -15339,9 +15337,9 @@ } }, "node_modules/prettier": { - "version": "3.9.6", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", - "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==", + "version": "3.9.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.8.tgz", + "integrity": "sha512-WRFq3Wn3WId7LLROfMLdH7xaFr2jR62wU8nLO6rQUOLOxNZUviyJQs1M0iIhLexSFy+L+w0ch66wtoO2jRjG0A==", "dev": true, "license": "MIT", "bin": { @@ -15354,6 +15352,73 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/probe-image-size": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-7.4.0.tgz", + "integrity": "sha512-cdEprVtZxV+awMde9X+4jILBFYh4CARxVrQaMl4wY4YcPWbul9jntXrIW95NInBDyJwcVUP3U0T6yukN8rMBaQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "lodash.merge": "^4.6.2", + "needle": "^2.5.2", + "stream-parser": "~0.3.1" + } + }, + "node_modules/probe-image-size/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/probe-image-size/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/probe-image-size/node_modules/needle": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, "node_modules/proc-log": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", @@ -15372,9 +15437,9 @@ "license": "MIT" }, "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz", + "integrity": "sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15383,6 +15448,10 @@ }, "engines": { "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/prr": { @@ -15444,9 +15513,9 @@ "license": "MIT" }, "node_modules/qs": { - "version": "6.15.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", - "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.0.tgz", + "integrity": "sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -15614,9 +15683,9 @@ "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.2.tgz", - "integrity": "sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==", + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.3.tgz", + "integrity": "sha512-ycwFAS14Jw4mppvmK4GR/J6u3WpWpjkEApehuHtLc/8VpPNpDMbQ4WjqwplXifGeyKOzHSFLmSPqzksDQE2Sfg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -15881,9 +15950,9 @@ } }, "node_modules/rollup": { - "version": "4.62.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz", - "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==", + "version": "4.63.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.63.3.tgz", + "integrity": "sha512-1i2XreiAoMMXuPGD6Msj2xWrMMkHojNRKivInxGQcg7/1KuPuYlfUutLyh4drnOxUTHX9cHI4wFoat8D/NKaBw==", "dev": true, "license": "MIT", "dependencies": { @@ -15898,31 +15967,31 @@ }, "optionalDependencies": { "@napi-rs/lzma-linux-x64-gnu": "1.5.1", - "@rollup/rollup-android-arm-eabi": "4.62.4", - "@rollup/rollup-android-arm64": "4.62.4", - "@rollup/rollup-darwin-arm64": "4.62.4", - "@rollup/rollup-darwin-x64": "4.62.4", - "@rollup/rollup-freebsd-arm64": "4.62.4", - "@rollup/rollup-freebsd-x64": "4.62.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.62.4", - "@rollup/rollup-linux-arm-musleabihf": "4.62.4", - "@rollup/rollup-linux-arm64-gnu": "4.62.4", - "@rollup/rollup-linux-arm64-musl": "4.62.4", - "@rollup/rollup-linux-loong64-gnu": "4.62.4", - "@rollup/rollup-linux-loong64-musl": "4.62.4", - "@rollup/rollup-linux-ppc64-gnu": "4.62.4", - "@rollup/rollup-linux-ppc64-musl": "4.62.4", - "@rollup/rollup-linux-riscv64-gnu": "4.62.4", - "@rollup/rollup-linux-riscv64-musl": "4.62.4", - "@rollup/rollup-linux-s390x-gnu": "4.62.4", - "@rollup/rollup-linux-x64-gnu": "4.62.4", - "@rollup/rollup-linux-x64-musl": "4.62.4", - "@rollup/rollup-openbsd-x64": "4.62.4", - "@rollup/rollup-openharmony-arm64": "4.62.4", - "@rollup/rollup-win32-arm64-msvc": "4.62.4", - "@rollup/rollup-win32-ia32-msvc": "4.62.4", - "@rollup/rollup-win32-x64-gnu": "4.62.4", - "@rollup/rollup-win32-x64-msvc": "4.62.4", + "@rollup/rollup-android-arm-eabi": "4.63.3", + "@rollup/rollup-android-arm64": "4.63.3", + "@rollup/rollup-darwin-arm64": "4.63.3", + "@rollup/rollup-darwin-x64": "4.63.3", + "@rollup/rollup-freebsd-arm64": "4.63.3", + "@rollup/rollup-freebsd-x64": "4.63.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.63.3", + "@rollup/rollup-linux-arm-musleabihf": "4.63.3", + "@rollup/rollup-linux-arm64-gnu": "4.63.3", + "@rollup/rollup-linux-arm64-musl": "4.63.3", + "@rollup/rollup-linux-loong64-gnu": "4.63.3", + "@rollup/rollup-linux-loong64-musl": "4.63.3", + "@rollup/rollup-linux-ppc64-gnu": "4.63.3", + "@rollup/rollup-linux-ppc64-musl": "4.63.3", + "@rollup/rollup-linux-riscv64-gnu": "4.63.3", + "@rollup/rollup-linux-riscv64-musl": "4.63.3", + "@rollup/rollup-linux-s390x-gnu": "4.63.3", + "@rollup/rollup-linux-x64-gnu": "4.63.3", + "@rollup/rollup-linux-x64-musl": "4.63.3", + "@rollup/rollup-openbsd-x64": "4.63.3", + "@rollup/rollup-openharmony-arm64": "4.63.3", + "@rollup/rollup-win32-arm64-msvc": "4.63.3", + "@rollup/rollup-win32-ia32-msvc": "4.63.3", + "@rollup/rollup-win32-x64-gnu": "4.63.3", + "@rollup/rollup-win32-x64-msvc": "4.63.3", "fsevents": "~2.3.2" } }, @@ -16150,15 +16219,15 @@ } }, "node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.5.0.tgz", + "integrity": "sha512-zJlMCZ0cAR5p/Y4oVpRoqioDMJcGxaXRrQ/4rP4WyR84vc5z/DolXdbvXeDpTwbtocDFr2rhPqHPErDCUtz2kA==", "dev": true, "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", + "@types/json-schema": "^7.0.15", + "ajv": "^8.20.0", + "ajv-formats": "^3.0.1", "ajv-keywords": "^5.1.0" }, "engines": { @@ -16169,22 +16238,21 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/schema-utils/node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/select-hose": { @@ -16262,9 +16330,9 @@ } }, "node_modules/serialize-javascript": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.1.0.tgz", - "integrity": "sha512-RNEqWOyhhUQYN9V1GfHwu9AR/g+NTciH6Z5u3/no6X3/w+04J2lVDL+svFQVXgXrEGBMG2puMVN3gq2SNGuTGw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.1.1.tgz", + "integrity": "sha512-k3CMsaIvvdSwm8oLB4MXSl0wH2/cwlH7xGcnRd2DaeRmBkbzYmyT8j0tsX60DwD1eRwHTpNpH8ljKu9oUT1MeQ==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -16667,9 +16735,9 @@ } }, "node_modules/socks": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.9.tgz", - "integrity": "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==", + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.10.tgz", + "integrity": "sha512-e0VyvkVTwVYViNovRkZ9aodhxVlyoMn7eJhVUPxZ+eK9P/7CBkxvvsBOHqFPEH416726W8tLXXXjKwqgTErrCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16800,9 +16868,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", - "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", + "version": "3.0.24", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.24.tgz", + "integrity": "sha512-cLS9TtWkIQFyLkJ3/5aFQAOHOSKTlOs/7WDut/XPSdjom1fJhUdkepeJAKXa9Y05+FabHd0sti+Et559vDtkpQ==", "dev": true, "license": "CC0-1.0" }, @@ -16927,10 +16995,40 @@ "dev": true, "license": "MIT" }, + "node_modules/stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "2" + } + }, + "node_modules/stream-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/stream-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/streamx": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.28.0.tgz", - "integrity": "sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==", + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.28.1.tgz", + "integrity": "sha512-zEzXb0s5Cds7tqMH6rhZ05lcJydCWiQPEwiNngVqzsxCc962vLY4Uw+mW7od8kDH258k2Uz/JrOkdIAAhSh9VA==", "dev": true, "license": "MIT", "dependencies": { @@ -17037,9 +17135,9 @@ } }, "node_modules/stylelint": { - "version": "17.14.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.14.1.tgz", - "integrity": "sha512-xVQwyiuxALUBNB2fBe0tmNemg9KqLtdj3T64mioFDar79B2cU8LIyz+3KL6LdiHs9NkeNfwxpKSaIVOY8f112g==", + "version": "17.15.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.15.0.tgz", + "integrity": "sha512-mWIkesYQvQjf4Kvdeu9ns0IL8/K/wtjaGxPqsPd6DlLZvaQxGysJsocxUDrBcyHQ5VleAk4uSMat4yMrVED7PA==", "dev": true, "funding": [ { @@ -17053,14 +17151,14 @@ ], "license": "MIT", "dependencies": { - "@csstools/css-calc": "^3.2.1", + "@csstools/css-calc": "^3.3.0", "@csstools/css-parser-algorithms": "^4.0.0", - "@csstools/css-syntax-patches-for-csstree": "^1.1.6", + "@csstools/css-syntax-patches-for-csstree": "^1.1.9", "@csstools/css-tokenizer": "^4.0.0", "@csstools/media-query-list-parser": "^5.0.0", - "@csstools/selector-resolve-nested": "^4.0.0", + "@csstools/selector-resolve-nested": "^4.0.1", "@csstools/selector-specificity": "^6.0.0", - "colord": "^2.9.3", + "colord": "^2.10.0", "cosmiconfig": "^9.0.2", "css-functions-list": "^3.3.3", "css-tree": "^3.2.1", @@ -17069,21 +17167,21 @@ "fastest-levenshtein": "^1.0.16", "file-entry-cache": "^11.1.5", "global-modules": "^2.0.0", - "globby": "^16.2.1", + "globby": "^16.2.4", "globjoin": "^0.1.4", "html-tags": "^5.1.0", - "ignore": "^7.0.5", + "ignore": "^7.0.6", "import-meta-resolve": "^4.2.0", "mathml-tag-names": "^4.0.0", "meow": "^14.1.0", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "picocolors": "^1.1.1", - "postcss": "^8.5.16", + "postcss": "^8.5.26", "postcss-safe-parser": "^7.0.1", - "postcss-selector-parser": "^7.1.4", + "postcss-selector-parser": "^7.1.5", "postcss-value-parser": "^4.2.0", - "string-width": "^8.2.1", + "string-width": "^8.2.2", "supports-hyperlinks": "^4.5.0", "svg-tags": "^1.0.0", "table": "^6.9.0", @@ -17096,28 +17194,6 @@ "node": ">=20.19.0" } }, - "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "11.1.5", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.5.tgz", - "integrity": "sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^6.1.23" - } - }, - "node_modules/stylelint/node_modules/flat-cache": { - "version": "6.1.23", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.23.tgz", - "integrity": "sha512-f++BY9pTk+983xK1FLzlLpmM0i0z+jHmx3QESGkURMXujQZz1k5wzwX6hjnQ8goaD0B+sYnDK1yZ6MTyZfUaqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cacheable": "^2.5.0", - "flatted": "^3.4.2", - "hookified": "^1.15.0" - } - }, "node_modules/stylelint/node_modules/global-modules": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", @@ -17146,6 +17222,16 @@ "node": ">=6" } }, + "node_modules/stylelint/node_modules/ignore": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.9.tgz", + "integrity": "sha512-brTTsvFRt5C1gGHtPst/281UjPD5t9fBqbgoMPlVWy11ZLTPfu7HxK4ZYqO9H7o/yC9rSTCI85EaQ4OoY12qYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/stylelint/node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", @@ -17543,9 +17629,9 @@ "license": "MIT" }, "node_modules/tinyexec": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz", - "integrity": "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.1.tgz", + "integrity": "sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==", "dev": true, "license": "MIT", "engines": { @@ -17750,9 +17836,9 @@ } }, "node_modules/type-is/node_modules/content-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", - "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", "dev": true, "license": "MIT", "engines": { @@ -17785,16 +17871,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.67.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.67.0.tgz", - "integrity": "sha512-S2udFs8tCKEKffuJ4TB1idGUZiXdCPGi3IPBGWXarbLQ5UPXORV8QEVzJ4gCRduURMb5EkpNCdjbk0eDIuI8Yg==", + "version": "8.70.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.70.0.tgz", + "integrity": "sha512-P/W5cz70/cQAuKfY3xwQMWWTV7BvJ0mAQmi+9mBcsVPaBUpd6Ohpa+fECv9rBFrQcig86jAiNBFNWUqnTjr4pw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.67.0", - "@typescript-eslint/parser": "8.67.0", - "@typescript-eslint/typescript-estree": "8.67.0", - "@typescript-eslint/utils": "8.67.0" + "@typescript-eslint/eslint-plugin": "8.70.0", + "@typescript-eslint/parser": "8.70.0", + "@typescript-eslint/typescript-estree": "8.70.0", + "@typescript-eslint/utils": "8.70.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -17855,9 +17941,9 @@ } }, "node_modules/undici": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz", - "integrity": "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.1.tgz", + "integrity": "sha512-RYONW2MeafgYlkVOKYKkA/Ag7BmXqgIWCa8t1m0JcxrQg9pI9lEqRhAOruOBCbAohOa/gkCF+iPi9hrgvTzu6Q==", "dev": true, "license": "MIT", "engines": { @@ -17949,9 +18035,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz", - "integrity": "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz", + "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==", "dev": true, "funding": [ { @@ -18227,19 +18313,19 @@ } }, "node_modules/vitest": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.10.tgz", - "integrity": "sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.11.tgz", + "integrity": "sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.1.10", - "@vitest/mocker": "4.1.10", - "@vitest/pretty-format": "4.1.10", - "@vitest/runner": "4.1.10", - "@vitest/snapshot": "4.1.10", - "@vitest/spy": "4.1.10", - "@vitest/utils": "4.1.10", + "@vitest/expect": "4.1.11", + "@vitest/mocker": "4.1.11", + "@vitest/pretty-format": "4.1.11", + "@vitest/runner": "4.1.11", + "@vitest/snapshot": "4.1.11", + "@vitest/spy": "4.1.11", + "@vitest/utils": "4.1.11", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", @@ -18267,12 +18353,12 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.1.10", - "@vitest/browser-preview": "4.1.10", - "@vitest/browser-webdriverio": "4.1.10", - "@vitest/coverage-istanbul": "4.1.10", - "@vitest/coverage-v8": "4.1.10", - "@vitest/ui": "4.1.10", + "@vitest/browser-playwright": "4.1.11", + "@vitest/browser-preview": "4.1.11", + "@vitest/browser-webdriverio": "4.1.11", + "@vitest/coverage-istanbul": "4.1.11", + "@vitest/coverage-v8": "4.1.11", + "@vitest/ui": "4.1.11", "happy-dom": "*", "jsdom": "*", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -18438,9 +18524,9 @@ } }, "node_modules/webpack-dev-server": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.5.tgz", - "integrity": "sha512-4wZtCquSuv9CKX8oybo+mqxtxZqWz47uM1Ch94lxowBztOhWCbhqvRbfC/mODOwxgV2brY+JGZpHq58/SuVFYg==", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.6.tgz", + "integrity": "sha512-HNLRmamRvVavZQ+avceZifmv8hmdUjg43t6MI4SqJDwFdW7RPQwH5vzGhDRZSX59SgfbeHhLnq3g+uooWo7pVw==", "dev": true, "license": "MIT", "dependencies": { @@ -18462,7 +18548,7 @@ "graceful-fs": "^4.2.6", "http-proxy-middleware": "^2.0.9", "ipaddr.js": "^2.1.0", - "launch-editor": "^2.6.1", + "launch-editor": "^2.14.1", "open": "^10.0.3", "p-retry": "^6.2.0", "schema-utils": "^4.2.0", @@ -18510,9 +18596,9 @@ } }, "node_modules/webpack-dev-server/node_modules/body-parser": { - "version": "1.20.6", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.6.tgz", - "integrity": "sha512-p5tAzS57i5MV9fZFDj9LeIiTZEufbSe2eDozP+ElheSUq1m74CRq1jI4mYNDdVs9vQztXFLuk/Gd6BWTdwRJ5g==", + "version": "1.20.8", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.8.tgz", + "integrity": "sha512-JNcyFQ64OiijEkPzUBTCe+hyPXUD/3LEldGQ6iF5LR1w00mx9o7xtDWHXBY2iItjdCFGoilOLNQbH943ut7pHA==", "dev": true, "license": "MIT", "dependencies": { @@ -18524,7 +18610,7 @@ "http-errors": "~2.0.1", "iconv-lite": "~0.4.24", "on-finished": "~2.4.1", - "qs": "~6.15.1", + "qs": "~6.16.0", "raw-body": "~2.5.3", "type-is": "~1.6.18", "unpipe": "~1.0.0" @@ -18597,9 +18683,9 @@ "license": "MIT" }, "node_modules/webpack-dev-server/node_modules/express": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.2.tgz", - "integrity": "sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==", + "version": "4.22.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.3.tgz", + "integrity": "sha512-Bdcs4+3qlpVlx2NRn6fgX2Ue2/gGRaPeawebgclM0ERSCqDpA+owF1fdPwjJUTAJWMTuAaxjDf+hzb0/4eKvvw==", "dev": true, "license": "MIT", "dependencies": { @@ -18622,9 +18708,9 @@ "methods": "~1.1.2", "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", + "path-to-regexp": "~0.1.13", "proxy-addr": "~2.0.7", - "qs": "~6.15.1", + "qs": "~6.16.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "~0.19.0", From 155d6f07fc47a303631c5369c4b6ac0389536c02 Mon Sep 17 00:00:00 2001 From: Paolo Argentieri Date: Mon, 21 Sep 2026 18:39:45 -0700 Subject: [PATCH 03/20] 21.1.3 --- .github/workflows/main.yml | 2 +- CHANGELOG.md | 6 ++++++ gulpfile.js | 16 +++++++++++++++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8e3b3591..49f76f58 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,7 +13,7 @@ on: workflow_dispatch: env: - NPM_VERSION: "21.1.2" + NPM_VERSION: "21.1.3" # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages permissions: diff --git a/CHANGELOG.md b/CHANGELOG.md index 4dd4a977..cfa54ad1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ +## 21.1.3 + +### Fixes + +- The CDN bundle (`lf-ui-components.js`) is now wrapped in a function scope, so its minified top-level declarations are no longer created as globals. On a page that shares `window` with other bundles, such as SharePoint, anything that later assigned one of those short names replaced the library's own binding, and the next component creation failed with an error such as `Rx is not a function`, leaving the custom element un-upgraded and its methods missing. Custom element registration and the source map are unaffected. + ## 21.1.2 ### Fixes diff --git a/gulpfile.js b/gulpfile.js index 84525565..7072896c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -54,6 +54,20 @@ async function processTypesFile() { .pipe(dest(NPM_PUBLISH)); } +// The CDN bundle is loaded as a classic script, so its minified top-level declarations would +// otherwise become globals - two-character names like `Rx`, `Nx`, `$`. On a page that shares +// `window` with other bundles (SharePoint being the obvious case), anything that later assigns +// one of those names replaces the library's own binding, and the next component creation fails. +// Wrapping keeps the declarations private; `customElements.define` still registers globally. +// The opening brace stays on the first line so line numbers - and the shipped source map - hold, +// and the sourceMappingURL comment is moved past the closing brace so it stays the last line. +const SOURCE_MAPPING_URL_COMMENT = /\n?\/\/# sourceMappingURL=.*\n?$/; + +function wrapInFunctionScope(contents) { + const sourceMappingUrl = contents.match(SOURCE_MAPPING_URL_COMMENT)?.[0].trim() ?? ''; + return `(function(){${contents.replace(SOURCE_MAPPING_URL_COMMENT, '')}\n})();\n${sourceMappingUrl}\n`; +} + async function renameLfCdn() { const mainJsPath = LF_CDN_BROWSER_DIR + MAIN_SCRIPT_FILE; const mainJsMapPath = LF_CDN_BROWSER_DIR + MAIN_SCRIPT_MAP_FILE; @@ -63,7 +77,7 @@ async function renameLfCdn() { if (fs.existsSync(mainJsPath)) { const content = fs.readFileSync(mainJsPath, 'utf8'); - fs.writeFileSync(cdnJsPath, content.replace(MAIN_SCRIPT_MAP_FILE, CDN_UI_COMPONENTS_MAP_FILE)); + fs.writeFileSync(cdnJsPath, wrapInFunctionScope(content.replace(MAIN_SCRIPT_MAP_FILE, CDN_UI_COMPONENTS_MAP_FILE))); fs.unlinkSync(mainJsPath); } From 065d995ea0b19da0366d7e3a9276313fc753ee41 Mon Sep 17 00:00:00 2001 From: Paolo Argentieri Date: Tue, 22 Sep 2026 08:10:27 -0700 Subject: [PATCH 04/20] Fix duplicate rendering and global leakage in the CDN bundle (21.1.3) Two defects that only affect the custom-element build. The Angular component build was never affected, which is why the docs site looked correct and no demo caught either one. Components rendered twice ------------------------- Every component the library instantiated inside another component rendered twice in the CDN build: once from the parent's Angular view, once from the browser upgrading the same host element, because the registered custom element tag was also the component's Angular selector. lf-field-container showed two template pickers and two "Add/remove fields" blocks; lf-repository-browser held a second, empty breadcrumbs bar. An audit found 28 of the 35 registered tags affected - 24 reached through a template and 4 through ViewContainerRef.createComponent or MatDialog.open, which a template scan alone would miss. Library components now declare an internal selector first ('lfint-x, lf-x'), so Angular builds host elements while the public selector stays available to Angular consumers and the registered tag names are unchanged. Angular uses the first selector for dynamically created hosts, so the four dynamic sites needed no change. Bundle leaked its declarations as globals ----------------------------------------- lf-ui-components.js is loaded as a classic script, so its 2,130 minified top-level declarations became globals - 1,852 of them two characters or fewer, including Rx, Nx and $. On a page sharing window with other bundles, anything that later assigned one of those names replaced the library's own binding and the next component creation failed with errors like "Rx is not a function". renameLfCdn now wraps the file in a function scope; measured leakage is zero. The opening brace stays on line 1 and the sourceMappingURL comment is moved past the closing brace, so the shipped source map stays aligned. Guarding both ------------- - registered-components.spec.ts asserts no registered tag appears in a library template, locks the set of tags that double as Angular host tags, and renders the composite components to assert one view each. It fails with "expected 2 to be 1" against the unfixed build. - scripts/verify-cdn-demo.mjs loads the demo page against the built bundle in Chromium, once per shipped theme, and fails on any count other than one. Wired into CI ahead of the step that moves the bundle out of dist/lf-cdn/browser. - The framework-agnostic demo and guide are rebuilt around the composite components, with service mocks, both documented lifecycle orders, and an on-page self-check. The previous demo used lf-tags only, the one component shape that cannot exhibit this. Co-Authored-By: Claude Opus 5 --- .github/workflows/main.yml | 6 + CHANGELOG.md | 1 + eslint.config.mjs | 8 +- package.json | 1 + .../src/app/registered-components.spec.ts | 140 +++++++++ .../lf-cdn/src/app/registered-components.ts | 91 ++++++ projects/lf-cdn/src/main.ts | 78 +---- .../example-usage-in-html.component.html | 32 +- .../framework-agnostic-ui-component-demo.html | 297 +++++++++++++++--- .../general-dialog-layout.component.ts | 2 +- .../lf-loader/lf-loader.component.ts | 2 +- .../lf-popup-modal.component.ts | 2 +- .../lf-toast-message.component.ts | 2 +- .../lf-checklist/items/items.component.ts | 2 +- .../lf-checklist/lf-checklist.component.html | 16 +- .../lf-checklist/options/options.component.ts | 2 +- .../date-field/date-field.component.html | 12 +- .../date-field/date-field.component.ts | 2 +- .../date-time-field.component.html | 12 +- .../date-time-field.component.ts | 2 +- .../dynamic-field/dynamic-field.component.ts | 2 +- .../lf-field-base.component.html | 32 +- .../lf-field-base/lf-field-base.component.ts | 2 +- .../list-field/list-field.component.ts | 2 +- .../number-field/number-field.component.html | 4 +- .../number-field/number-field.component.ts | 2 +- .../text-field/text-field.component.html | 8 +- .../text-field/text-field.component.ts | 2 +- .../time-field/time-field.component.html | 12 +- .../time-field/time-field.component.ts | 2 +- .../lf-token-picker.component.ts | 2 +- .../lf-field-group.component.html | 6 +- .../lf-field-group.component.ts | 2 +- .../lf-field-multivalue.component.html | 6 +- .../lf-field-multivalue.component.ts | 2 +- .../lf-field/lf-field.component.html | 6 +- .../lf-field/lf-field.component.ts | 2 +- .../uni-date-time.component.ts | 2 +- .../lf-field-add-remove.component.html | 4 +- .../lf-field-add-remove.component.ts | 2 +- .../lf-field-adhoc-container.component.html | 2 +- ...lf-field-adhoc-container.component.spec.ts | 2 +- .../lf-field-adhoc-container.component.ts | 2 +- .../lf-field-container.component.html | 8 +- ...lf-field-template-container.component.html | 2 +- .../lf-field-template-container.component.ts | 2 +- .../lf-repository-browser.component.html | 10 +- .../lf-repository-browser.component.spec.ts | 2 +- .../lf-selection-list.component.ts | 2 +- .../feedback-image-upload.component.html | 2 +- .../feedback-image-upload.component.ts | 2 +- .../feedback-submission.component.html | 6 +- .../feedback-submission.component.spec.ts | 2 +- .../feedback-submission.component.ts | 2 +- ...feedback-suggestion-selection.component.ts | 2 +- .../user-feedback-dialog.component.html | 12 +- .../user-feedback-dialog.component.spec.ts | 2 +- .../user-feedback-dialog.component.ts | 2 +- .../lf-breadcrumbs.component.ts | 2 +- scripts/verify-cdn-demo.mjs | 145 +++++++++ 60 files changed, 796 insertions(+), 227 deletions(-) create mode 100644 projects/lf-cdn/src/app/registered-components.spec.ts create mode 100644 projects/lf-cdn/src/app/registered-components.ts create mode 100644 scripts/verify-cdn-demo.mjs diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 49f76f58..ccaf203d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -82,6 +82,12 @@ jobs: use-actions-summary: "true" fail-on-error: "false" + # Runs the element build in a browser, which the component unit tests cannot do: they never + # register a custom element. Must stay ahead of the step that moves the bundle out of + # ./dist/lf-cdn/browser. + - name: npm run verify-cdn-demo + run: npm run verify-cdn-demo + - name: "create folder ./dist/ui-components/cdn" run: "mkdir -p ./dist/ui-components/cdn" diff --git a/CHANGELOG.md b/CHANGELOG.md index cfa54ad1..0b06e82b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ Licensed under the MIT License. See LICENSE in the project root for license info ### Fixes +- In the CDN custom-element build, every component the library instantiates inside another component rendered twice: once from the parent's Angular view and once from the browser upgrading the same host element. `lf-field-container` showed two template pickers and two "Add/remove fields" blocks, `lf-repository-browser` held a second empty breadcrumbs bar, and 28 of the 35 registered tags were affected. Library components now declare an internal `lfint-` selector that the library renders instead of the registered tag. The Angular component build was never affected, and the public tag names, element properties and Angular selectors are all unchanged. - The CDN bundle (`lf-ui-components.js`) is now wrapped in a function scope, so its minified top-level declarations are no longer created as globals. On a page that shares `window` with other bundles, such as SharePoint, anything that later assigned one of those short names replaced the library's own binding, and the next component creation failed with an error such as `Rx is not a function`, leaving the custom element un-upgraded and its methods missing. Custom element registration and the source map are unaffected. ## 21.1.2 diff --git a/eslint.config.mjs b/eslint.config.mjs index db536ad8..37d092e0 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -41,7 +41,13 @@ export default tseslint.config( rules: { ...sharedRules, "@angular-eslint/directive-selector": ["error", { type: "attribute", prefix: "lf", style: "camelCase" }], - "@angular-eslint/component-selector": ["error", { type: "element", prefix: "lf", style: "kebab-case" }], + // `lfint` is the internal selector prefix. A registered custom element tag must never be a + // selector Angular matches, or the component renders twice in the element build, so library + // templates reference `lfint-*` while `lf-*` stays available to Angular consumers. + "@angular-eslint/component-selector": [ + "error", + { type: "element", prefix: ["lf", "lfint"], style: "kebab-case" }, + ], }, }, diff --git a/package.json b/package.json index a9286aca..5a99a595 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "sass-ms": "sass projects/styles/lf-ms-office/lf-ms-office-lite.scss:dist/generated-assets/lf-ms-office-lite.css", "rename-lf-cdn": "gulp renameLfCdn", "create-lf-cdn": "npm run build-lf-cdn-prod && npm run rename-lf-cdn", + "verify-cdn-demo": "node scripts/verify-cdn-demo.mjs", "build-enum-types": "tsc projects/ui-components/shared/enums.ts --outDir types-lf-ui-components-publish --module es2022 --target es2022 --declaration false --skipLibCheck --moduleResolution node && node -e \"require('fs').renameSync('types-lf-ui-components-publish/enums.js','types-lf-ui-components-publish/index.js')\"", "create-types-lf-ui-components": "npm run tsc-cdn && npm run api-extractor && gulp processTypesFile && npm run build-enum-types && cd ./types-lf-ui-components-publish && npm pack" }, diff --git a/projects/lf-cdn/src/app/registered-components.spec.ts b/projects/lf-cdn/src/app/registered-components.spec.ts new file mode 100644 index 00000000..34334252 --- /dev/null +++ b/projects/lf-cdn/src/app/registered-components.spec.ts @@ -0,0 +1,140 @@ +// Copyright (c) Laserfiche. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +import { ApplicationRef, provideZonelessChangeDetection, reflectComponentType } from '@angular/core'; +import { createCustomElement } from '@angular/elements'; +import { createApplication } from '@angular/platform-browser'; +import { provideAnimations } from '@angular/platform-browser/animations'; +import { registeredComponents } from './registered-components'; + +// Raw library templates, inlined by Vite so the invariant can be checked in the browser. +const libraryTemplates = import.meta.glob('/projects/ui-components/**/*.component.html', { + query: '?raw', + import: 'default', + eager: true, +}) as Record; + +/** + * Tags a host creates itself and that no library component ever instantiates. Their Angular + * selector is allowed to equal their custom element tag because nothing upgrades a second + * instance into the same host. Every other registered component declares an `lfint-` selector + * first so Angular builds `` host elements instead. + */ +const HOST_CREATED_ONLY_TAGS = [ + 'lf-checklist', + 'lf-field-container', + 'lf-login', + 'lf-repository-browser', + 'lf-tags', + 'lf-toolbar', + 'lf-user-feedback', +]; + +/** The element name Angular gives a host it builds for this component. */ +function angularHostTag(component: RegisteredComponentType): string | undefined { + return reflectComponentType(component)?.selector.split(',')[0].trim(); +} + +type RegisteredComponentType = (typeof registeredComponents)[number]['component']; + +/** + * A component Angular instantiates gets a host element named after its first selector. When that + * name is also a registered custom element tag, the browser upgrades the same host and a second + * instance renders into it. Keeping registered tags out of anything Angular instantiates is the + * invariant that makes the duplicate structurally impossible. + */ +describe('registered custom element tags', () => { + const registeredTags = registeredComponents.map((c) => c.tag); + + it('are all distinct', () => { + expect(new Set(registeredTags).size).toBe(registeredTags.length); + }); + + it('never appear as an element in a library template', () => { + const violations: string[] = []; + + for (const tag of registeredTags) { + const usage = new RegExp(`<${tag}(?![a-zA-Z0-9-])`); + for (const [file, source] of Object.entries(libraryTemplates)) { + if (usage.test(source)) { + violations.push(`<${tag}> in ${file.replace('/projects/ui-components/', '')}`); + } + } + } + + expect(violations).toEqual([]); + }); + + it('double as an Angular host tag only for components no library code instantiates', () => { + // Locked to an exact set: adding a registration whose Angular host tag is also its custom + // element tag is the shape of the defect, so it has to be a deliberate edit here too. + const alsoAngularHostTags = registeredComponents + .filter((c) => angularHostTag(c.component) === c.tag) + .map((c) => c.tag) + .sort(); + + expect(alsoAngularHostTags).toEqual(HOST_CREATED_ONLY_TAGS); + }); + + it('keep the public selector available to Angular consumers', () => { + const missing = registeredComponents + .filter((c) => !reflectComponentType(c.component)?.isStandalone === false) + .filter((c) => { + const selectors = reflectComponentType(c.component)?.selector.split(',') ?? []; + return !selectors.some((s) => s.trim() === c.tag); + }) + .map((c) => `${c.component.name} no longer matches <${c.tag}> in an Angular template`); + + expect(missing).toEqual([]); + }); +}); + +/** + * The runtime half of the same invariant: create the public composite components the way a + * framework-agnostic host does and assert each inner view rendered once. + */ +describe('one rendered view per host tag', () => { + let appRef: ApplicationRef; + let container: HTMLElement; + + beforeAll(async () => { + appRef = await createApplication({ + providers: [provideAnimations(), provideZonelessChangeDetection()], + }); + + // customElements.define is per realm and cannot be undone, so register the whole set once. + for (const c of registeredComponents) { + if (!customElements.get(c.tag)) { + customElements.define(c.tag, createCustomElement(c.component, { injector: appRef.injector })); + } + } + }); + + beforeEach(() => { + container = document.createElement('div'); + document.body.appendChild(container); + }); + + afterEach(() => { + container.remove(); + }); + + /** Appends the tag the way a host does and lets the element upgrade and render. */ + async function render(tag: string): Promise { + const element = document.createElement(tag); + container.appendChild(element); + await new Promise((resolve) => setTimeout(resolve, 250)); + return element as HTMLElement; + } + + // The duplicate renders whether or not the host ever calls initAsync, so these need no service. + it.each([ + { tag: 'lf-field-container', view: '.lf-template-picker', name: 'template picker' }, + { tag: 'lf-field-container', view: '.adhoc-container', name: 'adhoc container' }, + { tag: 'lf-repository-browser', view: '.lf-breadcrumbs-container', name: 'breadcrumbs' }, + ])('renders exactly one $name inside $tag', async ({ tag, view }) => { + const element = await render(tag); + + expect(element.querySelectorAll(view).length).toBe(1); + }); +}); diff --git a/projects/lf-cdn/src/app/registered-components.ts b/projects/lf-cdn/src/app/registered-components.ts new file mode 100644 index 00000000..e9181e2a --- /dev/null +++ b/projects/lf-cdn/src/app/registered-components.ts @@ -0,0 +1,91 @@ +// Copyright (c) Laserfiche. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +import { Type } from '@angular/core'; + +import { LfLoginComponent } from '../../../ui-components/lf-login/lf-login.component'; +import { + GeneralDialogLayoutComponent, + LfLoaderComponent, + LfPopupModalComponent, + LfToastMessageComponent, +} from '../../../ui-components/internal-shared/lf-internal-shared-public-api'; +import { ItemsComponent } from '../../../ui-components/lf-checklist/items/items.component'; +import { LfChecklistComponent } from '../../../ui-components/lf-checklist/lf-checklist-public-api'; +import { OptionsComponent } from '../../../ui-components/lf-checklist/options/options.component'; +import { DateFieldComponent } from '../../../ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/date-field/date-field.component'; +import { DateTimeFieldComponent } from '../../../ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/date-time-field/date-time-field.component'; +import { DynamicFieldComponent } from '../../../ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/dynamic-field/dynamic-field.component'; +import { LfFieldBaseComponent } from '../../../ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/lf-field-base/lf-field-base.component'; +import { ListFieldComponent } from '../../../ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/list-field/list-field.component'; +import { NumberFieldComponent } from '../../../ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/number-field/number-field.component'; +import { TextFieldComponent } from '../../../ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/text-field/text-field.component'; +import { TimeFieldComponent } from '../../../ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/time-field/time-field.component'; +import { LfTokenPickerComponent } from '../../../ui-components/lf-metadata/field-components/field-base-parts/lf-token-picker/lf-token-picker.component'; +import { LfFieldComponent } from '../../../ui-components/lf-metadata/field-components/lf-field/lf-field.component'; +import { LfFieldGroupComponent } from '../../../ui-components/lf-metadata/field-components/lf-field-group/lf-field-group.component'; +import { LfFieldMultivalueComponent } from '../../../ui-components/lf-metadata/field-components/lf-field-multivalue/lf-field-multivalue.component'; +import { UniDateTimeComponent } from '../../../ui-components/lf-metadata/lf-date-time-picker/uni-date-time.component'; +import { LfFieldAdhocContainerComponent } from '../../../ui-components/lf-metadata/lf-field-adhoc-container/lf-field-adhoc-container.component'; +import { LfFieldAddRemoveComponent } from '../../../ui-components/lf-metadata/lf-field-adhoc-container/lf-field-add-remove/lf-field-add-remove.component'; +import { LfFieldContainerComponent } from '../../../ui-components/lf-metadata/lf-field-container/lf-field-container.component'; +import { LfFieldTemplateContainerComponent } from '../../../ui-components/lf-metadata/lf-field-template-container/lf-field-template-container.component'; +import { LfRepositoryBrowserComponent } from '../../../ui-components/lf-repository-browser/lf-repository-browser.component'; +import { LfSelectionListComponent } from '../../../ui-components/lf-selection-list/lf-selection-list.component'; +import { LfTagsComponent } from '../../../ui-components/lf-tags/tags.component'; +import { LfUserFeedbackComponent } from '../../../ui-components/lf-user-feedback/lf-user-feedback.component'; +import { FeedbackImageUploadComponent } from '../../../ui-components/lf-user-feedback/feedback-image-upload/feedback-image-upload.component'; +import { FeedbackSubmissionComponent } from '../../../ui-components/lf-user-feedback/feedback-submission/feedback-submission.component'; +import { FeedbackSuggestionSelectionComponent } from '../../../ui-components/lf-user-feedback/feedback-suggestion-selection/feedback-suggestion-selection.component'; +import { UserFeedbackDialogComponent } from '../../../ui-components/lf-user-feedback/user-feedback-dialog/user-feedback-dialog.component'; +import { LfBreadcrumbsComponent } from '../../../ui-components/shared/lf-breadcrumbs/lf-breadcrumbs.component'; +import { LfToolbarComponent } from '../../../ui-components/shared/lf-toolbar/lf-toolbar.component'; + +export interface RegisteredComponent { + tag: string; + component: Type; +} + +// The custom element tag a host creates is deliberately NOT the component's Angular selector. +// If a registered tag were also a selector Angular matches, any component Angular instantiates +// under that tag - from a template or through createComponent/dialog.open - would render twice: +// once from the parent's view, once from the browser upgrading the same host element. Library +// components therefore use `lfint-` selectors internally and are published under these tags. +// registered-components.spec.ts enforces that invariant. +export const registeredComponents: RegisteredComponent[] = [ + { tag: 'lf-general-dialog-layout', component: GeneralDialogLayoutComponent }, + { tag: 'lf-loader-component', component: LfLoaderComponent }, + { tag: 'lf-popup-modal-component', component: LfPopupModalComponent }, + { tag: 'lf-toast-message', component: LfToastMessageComponent }, + { tag: 'lf-items-component', component: ItemsComponent }, + { tag: 'lf-checklist', component: LfChecklistComponent }, + { tag: 'lf-options-component', component: OptionsComponent }, + { tag: 'lf-login', component: LfLoginComponent }, + { tag: 'lf-date-field-component', component: DateFieldComponent }, + { tag: 'lf-date-time-field-component', component: DateTimeFieldComponent }, + { tag: 'lf-dynamic-field-component', component: DynamicFieldComponent }, + { tag: 'lf-field-base-component', component: LfFieldBaseComponent }, + { tag: 'lf-list-field-component', component: ListFieldComponent }, + { tag: 'lf-number-field-component', component: NumberFieldComponent }, + { tag: 'lf-text-field-component', component: TextFieldComponent }, + { tag: 'lf-time-field-component', component: TimeFieldComponent }, + { tag: 'lf-token-picker-component', component: LfTokenPickerComponent }, + { tag: 'lf-field-component', component: LfFieldComponent }, + { tag: 'lf-field-group-component', component: LfFieldGroupComponent }, + { tag: 'lf-field-multivalue-component', component: LfFieldMultivalueComponent }, + { tag: 'lf-uni-date-time', component: UniDateTimeComponent }, + { tag: 'lf-field-adhoc-container', component: LfFieldAdhocContainerComponent }, + { tag: 'lf-field-add-remove-component', component: LfFieldAddRemoveComponent }, + { tag: 'lf-field-container', component: LfFieldContainerComponent }, + { tag: 'lf-field-template-container', component: LfFieldTemplateContainerComponent }, + { tag: 'lf-repository-browser', component: LfRepositoryBrowserComponent }, + { tag: 'lf-selection-list-component', component: LfSelectionListComponent }, + { tag: 'lf-tags', component: LfTagsComponent }, + { tag: 'lf-user-feedback', component: LfUserFeedbackComponent }, + { tag: 'lf-feedback-image-upload', component: FeedbackImageUploadComponent }, + { tag: 'lf-feedback-submission', component: FeedbackSubmissionComponent }, + { tag: 'lf-feedback-suggestion-selection', component: FeedbackSuggestionSelectionComponent }, + { tag: 'lf-user-feedback-dialog-component', component: UserFeedbackDialogComponent }, + { tag: 'lf-breadcrumbs', component: LfBreadcrumbsComponent }, + { tag: 'lf-toolbar', component: LfToolbarComponent }, +]; diff --git a/projects/lf-cdn/src/main.ts b/projects/lf-cdn/src/main.ts index 3a3ecf46..3cd89992 100644 --- a/projects/lf-cdn/src/main.ts +++ b/projects/lf-cdn/src/main.ts @@ -6,87 +6,13 @@ import { createApplication } from '@angular/platform-browser'; import { createCustomElement } from '@angular/elements'; import { provideAnimations } from '@angular/platform-browser/animations'; -import { LfLoginComponent } from '../../ui-components/lf-login/lf-login.component'; import { environment } from './environments/environment'; -import { - GeneralDialogLayoutComponent, - LfLoaderComponent, - LfPopupModalComponent, - LfToastMessageComponent, -} from '../../ui-components/internal-shared/lf-internal-shared-public-api'; -import { ItemsComponent } from '../../ui-components/lf-checklist/items/items.component'; -import { LfChecklistComponent } from '../../ui-components/lf-checklist/lf-checklist-public-api'; -import { OptionsComponent } from '../../ui-components/lf-checklist/options/options.component'; -import { DateFieldComponent } from '../../ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/date-field/date-field.component'; -import { DateTimeFieldComponent } from '../../ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/date-time-field/date-time-field.component'; -import { DynamicFieldComponent } from '../../ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/dynamic-field/dynamic-field.component'; -import { LfFieldBaseComponent } from '../../ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/lf-field-base/lf-field-base.component'; -import { ListFieldComponent } from '../../ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/list-field/list-field.component'; -import { NumberFieldComponent } from '../../ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/number-field/number-field.component'; -import { TextFieldComponent } from '../../ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/text-field/text-field.component'; -import { TimeFieldComponent } from '../../ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/time-field/time-field.component'; -import { LfTokenPickerComponent } from '../../ui-components/lf-metadata/field-components/field-base-parts/lf-token-picker/lf-token-picker.component'; -import { LfFieldComponent } from '../../ui-components/lf-metadata/field-components/lf-field/lf-field.component'; -import { LfFieldGroupComponent } from '../../ui-components/lf-metadata/field-components/lf-field-group/lf-field-group.component'; -import { LfFieldMultivalueComponent } from '../../ui-components/lf-metadata/field-components/lf-field-multivalue/lf-field-multivalue.component'; -import { UniDateTimeComponent } from '../../ui-components/lf-metadata/lf-date-time-picker/uni-date-time.component'; -import { LfFieldAdhocContainerComponent } from '../../ui-components/lf-metadata/lf-field-adhoc-container/lf-field-adhoc-container.component'; -import { LfFieldAddRemoveComponent } from '../../ui-components/lf-metadata/lf-field-adhoc-container/lf-field-add-remove/lf-field-add-remove.component'; -import { LfFieldContainerComponent } from '../../ui-components/lf-metadata/lf-field-container/lf-field-container.component'; -import { LfFieldTemplateContainerComponent } from '../../ui-components/lf-metadata/lf-field-template-container/lf-field-template-container.component'; -import { LfRepositoryBrowserComponent } from '../../ui-components/lf-repository-browser/lf-repository-browser.component'; -import { LfSelectionListComponent } from '../../ui-components/lf-selection-list/lf-selection-list.component'; -import { LfTagsComponent } from '../../ui-components/lf-tags/tags.component'; -import { LfUserFeedbackComponent } from '../../ui-components/lf-user-feedback/lf-user-feedback.component'; -import { FeedbackImageUploadComponent } from '../../ui-components/lf-user-feedback/feedback-image-upload/feedback-image-upload.component'; -import { FeedbackSubmissionComponent } from '../../ui-components/lf-user-feedback/feedback-submission/feedback-submission.component'; -import { FeedbackSuggestionSelectionComponent } from '../../ui-components/lf-user-feedback/feedback-suggestion-selection/feedback-suggestion-selection.component'; -import { UserFeedbackDialogComponent } from '../../ui-components/lf-user-feedback/user-feedback-dialog/user-feedback-dialog.component'; -import { LfBreadcrumbsComponent } from '../../ui-components/shared/lf-breadcrumbs/lf-breadcrumbs.component'; -import { LfToolbarComponent } from '../../ui-components/shared/lf-toolbar/lf-toolbar.component'; +import { registeredComponents } from './app/registered-components'; if (environment.production) { enableProdMode(); } -const components = [ - { tag: 'lf-general-dialog-layout', component: GeneralDialogLayoutComponent }, - { tag: 'lf-loader-component', component: LfLoaderComponent }, - { tag: 'lf-popup-modal-component', component: LfPopupModalComponent }, - { tag: 'lf-toast-message', component: LfToastMessageComponent }, - { tag: 'lf-items-component', component: ItemsComponent }, - { tag: 'lf-checklist', component: LfChecklistComponent }, - { tag: 'lf-options-component', component: OptionsComponent }, - { tag: 'lf-login', component: LfLoginComponent }, - { tag: 'lf-date-field-component', component: DateFieldComponent }, - { tag: 'lf-date-time-field-component', component: DateTimeFieldComponent }, - { tag: 'lf-dynamic-field-component', component: DynamicFieldComponent }, - { tag: 'lf-field-base-component', component: LfFieldBaseComponent }, - { tag: 'lf-list-field-component', component: ListFieldComponent }, - { tag: 'lf-number-field-component', component: NumberFieldComponent }, - { tag: 'lf-text-field-component', component: TextFieldComponent }, - { tag: 'lf-time-field-component', component: TimeFieldComponent }, - { tag: 'lf-token-picker-component', component: LfTokenPickerComponent }, - { tag: 'lf-field-component', component: LfFieldComponent }, - { tag: 'lf-field-group-component', component: LfFieldGroupComponent }, - { tag: 'lf-field-multivalue-component', component: LfFieldMultivalueComponent }, - { tag: 'lf-uni-date-time', component: UniDateTimeComponent }, - { tag: 'lf-field-adhoc-container', component: LfFieldAdhocContainerComponent }, - { tag: 'lf-field-add-remove-component', component: LfFieldAddRemoveComponent }, - { tag: 'lf-field-container', component: LfFieldContainerComponent }, - { tag: 'lf-field-template-container', component: LfFieldTemplateContainerComponent }, - { tag: 'lf-repository-browser', component: LfRepositoryBrowserComponent }, - { tag: 'lf-selection-list-component', component: LfSelectionListComponent }, - { tag: 'lf-tags', component: LfTagsComponent }, - { tag: 'lf-user-feedback', component: LfUserFeedbackComponent }, - { tag: 'lf-feedback-image-upload', component: FeedbackImageUploadComponent }, - { tag: 'lf-feedback-submission', component: FeedbackSubmissionComponent }, - { tag: 'lf-feedback-suggestion-selection', component: FeedbackSuggestionSelectionComponent }, - { tag: 'lf-user-feedback-dialog-component', component: UserFeedbackDialogComponent }, - { tag: 'lf-breadcrumbs', component: LfBreadcrumbsComponent }, - { tag: 'lf-toolbar', component: LfToolbarComponent }, -]; - createApplication({ providers: [provideAnimations(), provideZonelessChangeDetection()], }) @@ -94,7 +20,7 @@ createApplication({ const injector = appRef.injector; // Expose standalone components as a custom elements - for (const c of components) { + for (const c of registeredComponents) { const el = createCustomElement(c.component, { injector }); customElements.define(c.tag, el); } diff --git a/projects/lf-documentation/src/app/example-usage-in-html/example-usage-in-html.component.html b/projects/lf-documentation/src/app/example-usage-in-html/example-usage-in-html.component.html index 2e08052a..3eec4600 100644 --- a/projects/lf-documentation/src/app/example-usage-in-html/example-usage-in-html.component.html +++ b/projects/lf-documentation/src/app/example-usage-in-html/example-usage-in-html.component.html @@ -2,10 +2,36 @@ Licensed under the MIT License. See LICENSE in the project root for license information.-->

Using UI Components in a Framework-Agnostic Way

-

Example: lf-tags

+ +

Which tags you can create

+

+ The CDN bundle registers a custom element for each of the documented components. These are the tags a host is meant to + create: +

+
    +
  • + lf-field-container, lf-field-template-container, lf-field-adhoc-container +
  • +
  • + lf-repository-browser, lf-selection-list-component, lf-breadcrumbs, + lf-toolbar +
  • +
  • lf-tags, lf-login, lf-checklist, lf-user-feedback
  • +
+

+ Other registered tags are internal building blocks. The library renders them itself under lfint- + selectors, and they are not part of the supported surface — do not create them directly. +

+

+ lf-field-container and lf-repository-browser are composite: they render other + components inside their own view, and they are what most integrations embed. The live demo at the end of this page + shows both, alongside the simpler leaf component taught below, and self-checks that each view rendered exactly once. +

+ +

Simplest example: lf-tags

- The steps below show how to use lf-tags in a plain HTML file without any framework. A complete working - example and live demo are shown at the end. + The steps below show how to use lf-tags, a leaf component, in a plain HTML file without any framework. A + complete working example and live demo are shown at the end.

  1. diff --git a/projects/static-assets/framework-agnostic-ui-component-demo.html b/projects/static-assets/framework-agnostic-ui-component-demo.html index ad076cbf..355691fa 100644 --- a/projects/static-assets/framework-agnostic-ui-component-demo.html +++ b/projects/static-assets/framework-agnostic-ui-component-demo.html @@ -9,57 +9,284 @@ + + -
    -

    selectedTagsChanged output:

    - +

    Framework-agnostic UI components

    + +

    + Every component below is created with document.createElement and configured through properties on the + element. The tags a host may create are the documented entry points: lf-field-container, + lf-field-template-container, lf-field-adhoc-container, + lf-repository-browser, lf-selection-list-component, lf-breadcrumbs, + lf-toolbar, lf-tags, lf-login, lf-checklist and + lf-user-feedback. Other registered tags are internal; the library renders them itself under + lfint- names and they are not part of the supported surface. +

    + + +
    +

    lf-field-container

    +

    Composite component. Configured with initAsync after the element is in the DOM.

    +
    +
    + + +
    +

    lf-repository-browser

    +

    Composite component; renders its own breadcrumbs and projects the toolbar you pass in.

    +
    +
    + + +
    +

    lf-tags

    +

    Leaf component. Configured by setting properties before the element is appended.

    +
    +

    selectedTagsChanged output:

    + +
    + + +
    +

    Self-check

    +

    Each view must render exactly once. Two of anything means a component was instantiated twice.

    + + + + + + + + + + +
    CheckExpectedActualResult
    +
    + diff --git a/projects/ui-components/internal-shared/general-dialog-layout/general-dialog-layout.component.ts b/projects/ui-components/internal-shared/general-dialog-layout/general-dialog-layout.component.ts index ff94dc2d..f39a509b 100644 --- a/projects/ui-components/internal-shared/general-dialog-layout/general-dialog-layout.component.ts +++ b/projects/ui-components/internal-shared/general-dialog-layout/general-dialog-layout.component.ts @@ -7,7 +7,7 @@ import { Component } from '@angular/core'; * Not for public use */ @Component({ - selector: 'lf-general-dialog-layout', + selector: 'lfint-general-dialog-layout, lf-general-dialog-layout', templateUrl: './general-dialog-layout.component.html', styleUrls: ['./general-dialog-layout.component.css'], standalone: true, diff --git a/projects/ui-components/internal-shared/lf-loader/lf-loader.component.ts b/projects/ui-components/internal-shared/lf-loader/lf-loader.component.ts index 8447ed09..72c71247 100644 --- a/projects/ui-components/internal-shared/lf-loader/lf-loader.component.ts +++ b/projects/ui-components/internal-shared/lf-loader/lf-loader.component.ts @@ -11,7 +11,7 @@ import { AppLocalizationService } from '../app-localization.service'; * Not for public use */ @Component({ - selector: 'lf-loader-component', + selector: 'lfint-loader-component, lf-loader-component', templateUrl: './lf-loader.component.html', styleUrls: ['./lf-loader.component.css'], standalone: true, diff --git a/projects/ui-components/internal-shared/lf-modals/lf-popup-modal/lf-popup-modal.component.ts b/projects/ui-components/internal-shared/lf-modals/lf-popup-modal/lf-popup-modal.component.ts index 287d45be..66386077 100644 --- a/projects/ui-components/internal-shared/lf-modals/lf-popup-modal/lf-popup-modal.component.ts +++ b/projects/ui-components/internal-shared/lf-modals/lf-popup-modal/lf-popup-modal.component.ts @@ -10,7 +10,7 @@ import { Observable } from 'rxjs'; * Not for public use */ @Component({ - selector: 'lf-popup-modal-component', + selector: 'lfint-popup-modal-component, lf-popup-modal-component', templateUrl: './lf-popup-modal.component.html', styleUrls: ['./lf-popup-modal.component.css'], standalone: true, diff --git a/projects/ui-components/internal-shared/lf-toast-message/lf-toast-message.component.ts b/projects/ui-components/internal-shared/lf-toast-message/lf-toast-message.component.ts index 65909b89..2031aded 100644 --- a/projects/ui-components/internal-shared/lf-toast-message/lf-toast-message.component.ts +++ b/projects/ui-components/internal-shared/lf-toast-message/lf-toast-message.component.ts @@ -24,7 +24,7 @@ export interface LfToastMessage { /** @internal */ @Component({ - selector: 'lf-toast-message', + selector: 'lfint-toast-message, lf-toast-message', templateUrl: './lf-toast-message.component.html', styleUrls: ['./lf-toast-message.component.css'], standalone: true, diff --git a/projects/ui-components/lf-checklist/items/items.component.ts b/projects/ui-components/lf-checklist/items/items.component.ts index 23c91022..28eb8765 100644 --- a/projects/ui-components/lf-checklist/items/items.component.ts +++ b/projects/ui-components/lf-checklist/items/items.component.ts @@ -24,7 +24,7 @@ import { ItemsValidationTextPipe } from './items-validation-text.pipe'; * @internal */ @Component({ - selector: 'lf-items-component', + selector: 'lfint-items-component, lf-items-component', templateUrl: './items.component.html', styleUrls: ['./items.component.css', './../lf-checklist/lf-checklist.component.css'], standalone: true, diff --git a/projects/ui-components/lf-checklist/lf-checklist/lf-checklist.component.html b/projects/ui-components/lf-checklist/lf-checklist/lf-checklist.component.html index 088420fc..7747467b 100644 --- a/projects/ui-components/lf-checklist/lf-checklist/lf-checklist.component.html +++ b/projects/ui-components/lf-checklist/lf-checklist/lf-checklist.component.html @@ -13,16 +13,16 @@ }} @if (checklist.checklistItems.length > 0) { - + > } @if (checklist.checklistOptions.length > 0) { - + > } } @@ -37,16 +37,16 @@ @if (checklist.checklistItems.length > 0) { - + > } @if (checklist.checklistOptions.length > 0) { - + > } diff --git a/projects/ui-components/lf-checklist/options/options.component.ts b/projects/ui-components/lf-checklist/options/options.component.ts index 9b5c25a4..153b8f06 100644 --- a/projects/ui-components/lf-checklist/options/options.component.ts +++ b/projects/ui-components/lf-checklist/options/options.component.ts @@ -8,7 +8,7 @@ import { MatCheckboxModule } from '@angular/material/checkbox'; import { ChecklistOption } from './checklist-option'; @Component({ - selector: 'lf-options-component', + selector: 'lfint-options-component, lf-options-component', templateUrl: './options.component.html', styleUrls: ['./options.component.css', './../lf-checklist/lf-checklist.component.css'], standalone: true, diff --git a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/date-field/date-field.component.html b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/date-field/date-field.component.html index 632e9e7b..e2dd58f7 100644 --- a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/date-field/date-field.component.html +++ b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/date-field/date-field.component.html @@ -15,23 +15,23 @@ } @if (!showTokenTextBox) { - - + } - + > } @else { - - + } @if (getBrokenValidationRule()) { {{ fieldValidationErrorMsg | async }} diff --git a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/date-field/date-field.component.ts b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/date-field/date-field.component.ts index fafa7a0f..d41de963 100644 --- a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/date-field/date-field.component.ts +++ b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/date-field/date-field.component.ts @@ -17,7 +17,7 @@ import { LfTokenPickerComponent } from '../../lf-token-picker/lf-token-picker.co import { DynamicFieldComponent } from '../dynamic-field/dynamic-field.component'; @Component({ - selector: 'lf-date-field-component', + selector: 'lfint-date-field-component, lf-date-field-component', templateUrl: './date-field.component.html', styleUrls: ['./date-field.component.css', './../lf-field-base/lf-field-base.component.css'], providers: [ diff --git a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/date-time-field/date-time-field.component.html b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/date-time-field/date-time-field.component.html index 42ec50bf..6096c8dd 100644 --- a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/date-time-field/date-time-field.component.html +++ b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/date-time-field/date-time-field.component.html @@ -15,23 +15,23 @@ } @if (!showTokenTextBox) { - - + } - + > } @else { - - + } @if (getBrokenValidationRule()) { {{ fieldValidationErrorMsg | async }} diff --git a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/date-time-field/date-time-field.component.ts b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/date-time-field/date-time-field.component.ts index 28ec7bf6..70b83ded 100644 --- a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/date-time-field/date-time-field.component.ts +++ b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/date-time-field/date-time-field.component.ts @@ -16,7 +16,7 @@ import { LfTokenPickerComponent } from '../../lf-token-picker/lf-token-picker.co import { DynamicFieldComponent } from '../dynamic-field/dynamic-field.component'; @Component({ - selector: 'lf-date-time-field-component', + selector: 'lfint-date-time-field-component, lf-date-time-field-component', templateUrl: './date-time-field.component.html', styleUrls: ['./date-time-field.component.css', './../lf-field-base/lf-field-base.component.css'], providers: [ diff --git a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/dynamic-field/dynamic-field.component.ts b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/dynamic-field/dynamic-field.component.ts index 6fd985fc..1f24a930 100644 --- a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/dynamic-field/dynamic-field.component.ts +++ b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/dynamic-field/dynamic-field.component.ts @@ -10,7 +10,7 @@ import { ValidationRule } from '@laserfiche/lf-ui-components/internal-shared'; import { Observable } from 'rxjs'; @Component({ - selector: 'lf-dynamic-field-component', + selector: 'lfint-dynamic-field-component, lf-dynamic-field-component', templateUrl: './dynamic-field.component.html', styleUrls: ['./dynamic-field.component.css', './../lf-field-base/lf-field-base.component.css'], standalone: true, diff --git a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/lf-field-base/lf-field-base.component.html b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/lf-field-base/lf-field-base.component.html index ce34c846..28bedd4a 100644 --- a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/lf-field-base/lf-field-base.component.html +++ b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/lf-field-base/lf-field-base.component.html @@ -4,7 +4,7 @@ @switch (lfFieldInfo.fieldType) { @case (fieldTypeDateTime) { - - + } @case (fieldTypeString) { - - + } @case (fieldTypeDate) { - - + } @case (fieldTypeShortInteger) { - - + } @case (fieldTypeLongInteger) { - - + } @case (fieldTypeList) { - - + } @case (fieldTypeNumber) { - - + } @case (fieldTypeTime) { - - + } } diff --git a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/lf-field-base/lf-field-base.component.ts b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/lf-field-base/lf-field-base.component.ts index 36f6238f..0602af33 100644 --- a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/lf-field-base/lf-field-base.component.ts +++ b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/lf-field-base/lf-field-base.component.ts @@ -14,7 +14,7 @@ import { ListFieldComponent } from '../list-field/list-field.component'; import { TimeFieldComponent } from '../time-field/time-field.component'; @Component({ - selector: 'lf-field-base-component', + selector: 'lfint-field-base-component, lf-field-base-component', templateUrl: './lf-field-base.component.html', styleUrls: ['./lf-field-base.component.css'], standalone: true, diff --git a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/list-field/list-field.component.ts b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/list-field/list-field.component.ts index f1284268..60222598 100644 --- a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/list-field/list-field.component.ts +++ b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/list-field/list-field.component.ts @@ -12,7 +12,7 @@ import { ValidationRule } from '@laserfiche/lf-ui-components/internal-shared'; import { Observable } from 'rxjs'; @Component({ - selector: 'lf-list-field-component', + selector: 'lfint-list-field-component, lf-list-field-component', templateUrl: './list-field.component.html', styleUrls: ['./list-field.component.css', './../lf-field-base/lf-field-base.component.css'], providers: [ diff --git a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/number-field/number-field.component.html b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/number-field/number-field.component.html index fdac54c7..6cd03475 100644 --- a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/number-field/number-field.component.html +++ b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/number-field/number-field.component.html @@ -36,7 +36,7 @@ } } @else { - - + } diff --git a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/number-field/number-field.component.ts b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/number-field/number-field.component.ts index 09472a25..593231f5 100644 --- a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/number-field/number-field.component.ts +++ b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/number-field/number-field.component.ts @@ -15,7 +15,7 @@ import { NgxMaskDirective, provideNgxMask } from 'ngx-mask'; import { DynamicFieldComponent } from '../dynamic-field/dynamic-field.component'; @Component({ - selector: 'lf-number-field-component', + selector: 'lfint-number-field-component, lf-number-field-component', templateUrl: './number-field.component.html', styleUrls: ['./number-field.component.css', './../lf-field-base/lf-field-base.component.css'], providers: [ diff --git a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/text-field/text-field.component.html b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/text-field/text-field.component.html index 0869e9b7..d73be78a 100644 --- a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/text-field/text-field.component.html +++ b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/text-field/text-field.component.html @@ -49,15 +49,15 @@ } } - - + } @else { - - + } diff --git a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/text-field/text-field.component.ts b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/text-field/text-field.component.ts index 4264eef2..6768efd3 100644 --- a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/text-field/text-field.component.ts +++ b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/text-field/text-field.component.ts @@ -14,7 +14,7 @@ import { LfTokenPickerComponent } from '../../lf-token-picker/lf-token-picker.co import { DynamicFieldComponent } from '../dynamic-field/dynamic-field.component'; @Component({ - selector: 'lf-text-field-component', + selector: 'lfint-text-field-component, lf-text-field-component', templateUrl: './text-field.component.html', styleUrls: ['./text-field.component.css', './../lf-field-base/lf-field-base.component.css'], providers: [ diff --git a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/time-field/time-field.component.html b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/time-field/time-field.component.html index b759730c..12728f66 100644 --- a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/time-field/time-field.component.html +++ b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/time-field/time-field.component.html @@ -16,24 +16,24 @@ } @if (!showTokenTextBox) { - - + } - - + } @else { - - + } @if (getBrokenValidationRule()) { {{ fieldValidationErrorMsg | async }} diff --git a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/time-field/time-field.component.ts b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/time-field/time-field.component.ts index 12ae9f30..c5c34cab 100644 --- a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/time-field/time-field.component.ts +++ b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-field-base/time-field/time-field.component.ts @@ -16,7 +16,7 @@ import { LfTokenPickerComponent } from '../../lf-token-picker/lf-token-picker.co import { DynamicFieldComponent } from '../dynamic-field/dynamic-field.component'; @Component({ - selector: 'lf-time-field-component', + selector: 'lfint-time-field-component, lf-time-field-component', templateUrl: './time-field.component.html', styleUrls: ['./time-field.component.css', './../lf-field-base/lf-field-base.component.css'], providers: [ diff --git a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-token-picker/lf-token-picker.component.ts b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-token-picker/lf-token-picker.component.ts index 494dea3b..3004ff32 100644 --- a/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-token-picker/lf-token-picker.component.ts +++ b/projects/ui-components/lf-metadata/field-components/field-base-parts/lf-token-picker/lf-token-picker.component.ts @@ -8,7 +8,7 @@ import { LfFieldTokenService } from '../lf-field-base/lf-field-token.service'; import { LfToken } from './lf-token.service'; @Component({ - selector: 'lf-token-picker-component', + selector: 'lfint-token-picker-component, lf-token-picker-component', templateUrl: './lf-token-picker.component.html', styleUrls: ['./lf-token-picker.component.css'], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/projects/ui-components/lf-metadata/field-components/lf-field-group/lf-field-group.component.html b/projects/ui-components/lf-metadata/field-components/lf-field-group/lf-field-group.component.html index 27a6ce72..ddda0b5a 100644 --- a/projects/ui-components/lf-metadata/field-components/lf-field-group/lf-field-group.component.html +++ b/projects/ui-components/lf-metadata/field-components/lf-field-group/lf-field-group.component.html @@ -46,11 +46,11 @@ * } @if (isLoading(fieldDef.fieldInfo, currentIndex)) { - + } } - - + } diff --git a/projects/ui-components/lf-metadata/field-components/lf-field-group/lf-field-group.component.ts b/projects/ui-components/lf-metadata/field-components/lf-field-group/lf-field-group.component.ts index 1d8437cd..5e14bd00 100644 --- a/projects/ui-components/lf-metadata/field-components/lf-field-group/lf-field-group.component.ts +++ b/projects/ui-components/lf-metadata/field-components/lf-field-group/lf-field-group.component.ts @@ -22,7 +22,7 @@ import { LfFieldBaseComponent } from '../field-base-parts/lf-field-base/lf-field import { LfFieldGroupIndexDisplayPipe } from './lf-field-group-index-display.pipe'; @Component({ - selector: 'lf-field-group-component', + selector: 'lfint-field-group-component, lf-field-group-component', templateUrl: './lf-field-group.component.html', styleUrls: ['./lf-field-group.component.css'], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/projects/ui-components/lf-metadata/field-components/lf-field-multivalue/lf-field-multivalue.component.html b/projects/ui-components/lf-metadata/field-components/lf-field-multivalue/lf-field-multivalue.component.html index e8b83151..d78dd394 100644 --- a/projects/ui-components/lf-metadata/field-components/lf-field-multivalue/lf-field-multivalue.component.html +++ b/projects/ui-components/lf-metadata/field-components/lf-field-multivalue/lf-field-multivalue.component.html @@ -8,7 +8,7 @@ * } @if (isLoading) { - + }
    @@ -19,7 +19,7 @@ let isLast = $last ) { - - + @if (!isLast && lfFieldValues.length > 1) {
    - +
    diff --git a/projects/ui-components/lf-user-feedback/feedback-image-upload/feedback-image-upload.component.ts b/projects/ui-components/lf-user-feedback/feedback-image-upload/feedback-image-upload.component.ts index 9962ba78..b5fdaa68 100644 --- a/projects/ui-components/lf-user-feedback/feedback-image-upload/feedback-image-upload.component.ts +++ b/projects/ui-components/lf-user-feedback/feedback-image-upload/feedback-image-upload.component.ts @@ -7,7 +7,7 @@ import { AppLocalizationService, LfLoaderComponent } from '@laserfiche/lf-ui-com /** @internal */ @Component({ - selector: 'lf-feedback-image-upload', + selector: 'lfint-feedback-image-upload, lf-feedback-image-upload', templateUrl: './feedback-image-upload.component.html', styleUrls: ['./feedback-image-upload.component.css', '../user-feedback-dialog/user-feedback-dialog.component.css'], standalone: true, diff --git a/projects/ui-components/lf-user-feedback/feedback-submission/feedback-submission.component.html b/projects/ui-components/lf-user-feedback/feedback-submission/feedback-submission.component.html index 7bff3f68..6c6d34d4 100644 --- a/projects/ui-components/lf-user-feedback/feedback-submission/feedback-submission.component.html +++ b/projects/ui-components/lf-user-feedback/feedback-submission/feedback-submission.component.html @@ -2,7 +2,7 @@ Licensed under the MIT License. See LICENSE in the project root for license information.-->
    - +
    {{ isFeedback @@ -29,11 +29,11 @@ / {{ maxFeedbackLength }}
    - + > - + diff --git a/projects/ui-components/lf-user-feedback/user-feedback-dialog/user-feedback-dialog.component.spec.ts b/projects/ui-components/lf-user-feedback/user-feedback-dialog/user-feedback-dialog.component.spec.ts index d6341a25..25d18d03 100644 --- a/projects/ui-components/lf-user-feedback/user-feedback-dialog/user-feedback-dialog.component.spec.ts +++ b/projects/ui-components/lf-user-feedback/user-feedback-dialog/user-feedback-dialog.component.spec.ts @@ -13,7 +13,7 @@ import { UserFeedbackDialogData, UserFeedbackTrackingEventType } from '../lf-use import { UserFeedbackDialogComponent } from './user-feedback-dialog.component'; @Component({ - selector: 'lf-feedback-suggestion-selection', + selector: 'lfint-feedback-suggestion-selection', template: '

    Mock Feedback Suggestion Selection Component

    ', standalone: true, }) diff --git a/projects/ui-components/lf-user-feedback/user-feedback-dialog/user-feedback-dialog.component.ts b/projects/ui-components/lf-user-feedback/user-feedback-dialog/user-feedback-dialog.component.ts index 5814ce6e..c6cabfc5 100644 --- a/projects/ui-components/lf-user-feedback/user-feedback-dialog/user-feedback-dialog.component.ts +++ b/projects/ui-components/lf-user-feedback/user-feedback-dialog/user-feedback-dialog.component.ts @@ -34,7 +34,7 @@ export enum FeedbackDialogState { * @internal */ @Component({ - selector: 'lf-user-feedback-dialog-component', + selector: 'lfint-user-feedback-dialog-component, lf-user-feedback-dialog-component', templateUrl: './user-feedback-dialog.component.html', styleUrls: ['./user-feedback-dialog.component.css'], standalone: true, diff --git a/projects/ui-components/shared/lf-breadcrumbs/lf-breadcrumbs.component.ts b/projects/ui-components/shared/lf-breadcrumbs/lf-breadcrumbs.component.ts index 0e781e2c..f0df8b11 100644 --- a/projects/ui-components/shared/lf-breadcrumbs/lf-breadcrumbs.component.ts +++ b/projects/ui-components/shared/lf-breadcrumbs/lf-breadcrumbs.component.ts @@ -8,7 +8,7 @@ import { MatButtonToggleModule } from '@angular/material/button-toggle'; import { LfBreadcrumb } from './lf-breadcrumbs-types'; @Component({ - selector: 'lf-breadcrumbs', + selector: 'lfint-breadcrumbs, lf-breadcrumbs', templateUrl: './lf-breadcrumbs.component.html', styleUrls: ['./lf-breadcrumbs.component.css'], standalone: true, diff --git a/scripts/verify-cdn-demo.mjs b/scripts/verify-cdn-demo.mjs new file mode 100644 index 00000000..b5721025 --- /dev/null +++ b/scripts/verify-cdn-demo.mjs @@ -0,0 +1,145 @@ +// Copyright (c) Laserfiche. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +/** + * Loads the framework-agnostic demo page against the built CDN bundle in a real browser and fails + * if any view rendered a number of times other than once. + * + * Unit tests on the Angular components cannot catch this class of defect: they never register a + * custom element, so the element upgrade that produces a duplicate instance never happens. This + * runs the element build the way an integrating host does, once per shipped theme. + */ + +import http from "node:http"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { chromium } from "playwright"; + +const REPO_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); + +// The bundle and the demo page are built into lf-cdn; the themes are compiled separately by +// sass-lf/sass-ms and are only copied next to the bundle later in packaging. Serving both means +// this runs straight after `create-lf-cdn` with no staging step. +const SERVE_ROOTS = [path.join(REPO_ROOT, "dist/lf-cdn/browser"), path.join(REPO_ROOT, "dist/generated-assets")]; +const DEMO_PAGE = "framework-agnostic-ui-component-demo.html"; +const THEMES = ["lf-laserfiche-lite.css", "lf-ms-office-lite.css"]; + +/** Resolves a request against the serve roots in order, or undefined when nothing matches. */ +function resolveFile(relative) { + for (const root of SERVE_ROOTS) { + const file = path.join(root, relative); + if (file.startsWith(root) && fs.existsSync(file)) { + return file; + } + } + return undefined; +} + +const CONTENT_TYPES = { + ".html": "text/html", + ".js": "text/javascript", + ".css": "text/css", + ".map": "application/json", + ".ico": "image/x-icon", + ".png": "image/png", + ".svg": "image/svg+xml", + ".woff": "font/woff", + ".woff2": "font/woff2", +}; + +function startServer() { + const server = http.createServer((req, res) => { + const relative = decodeURIComponent(req.url.split("?")[0]).replace(/^\/+/, "") || "index.html"; + const file = resolveFile(relative); + if (!file) { + res.writeHead(404).end(`not found: ${relative}`); + return; + } + fs.readFile(file, (err, buffer) => { + if (err) { + res.writeHead(404).end(`not found: ${relative}`); + return; + } + res.writeHead(200, { "Content-Type": CONTENT_TYPES[path.extname(file)] ?? "application/octet-stream" }); + res.end(buffer); + }); + }); + + return new Promise((resolve) => { + server.listen(0, "127.0.0.1", () => resolve({ server, port: server.address().port })); + }); +} + +async function checkTheme(browser, port, theme) { + const page = await browser.newPage(); + const pageErrors = []; + page.on("pageerror", (error) => pageErrors.push(String(error))); + page.on("console", (message) => { + if (message.type() === "error") pageErrors.push(message.text()); + }); + + await page.goto(`http://127.0.0.1:${port}/${DEMO_PAGE}?theme=${theme}`, { waitUntil: "load" }); + + let result; + try { + await page.waitForFunction(() => window.__lfDemoResult !== undefined, null, { timeout: 30_000 }); + result = await page.evaluate(() => window.__lfDemoResult); + } catch { + result = { pass: false, error: "the page never reported a result", checks: [] }; + } + + await page.close(); + return { theme, result, pageErrors }; +} + +const themes = THEMES.filter((theme) => resolveFile(theme)); + +if (!resolveFile("lf-ui-components.js")) { + console.error('No CDN bundle found. Run "npm run create-lf-cdn" first.'); + process.exit(1); +} + +// Every shipped theme has to be exercised: whichever one the demo covers is the one that gets +// attention, so a missing theme is a gap in the matrix rather than something to skip past. +const missingThemes = THEMES.filter((theme) => !themes.includes(theme)); +if (missingThemes.length > 0) { + console.error(`Missing theme(s): ${missingThemes.join(", ")}. Run "npm run sass-lf" and "npm run sass-ms".`); + process.exit(1); +} + +const { server, port } = await startServer(); +const browser = await chromium.launch({ args: ["--no-sandbox"] }); + +let failed = false; +try { + for (const theme of themes) { + const { result, pageErrors } = await checkTheme(browser, port, theme); + + console.log(`\n${theme}`); + for (const check of result.checks ?? []) { + console.log(` ${check.pass ? "ok " : "FAIL"} ${check.name}: expected ${check.expected}, got ${check.actual}`); + } + if (result.error) { + console.log(` FAIL ${result.error}`); + } + for (const error of pageErrors) { + console.log(` page error: ${error}`); + } + + // A page error means the element build threw, which is a failure even if the counts are right. + if (!result.pass || pageErrors.length > 0) { + failed = true; + } + } +} finally { + await browser.close(); + server.close(); +} + +if (failed) { + console.error("\nCDN demo verification failed."); + process.exit(1); +} + +console.log(`\nCDN demo verification passed for ${themes.length} theme(s).`); From f6d46fd47faf1b51fcd0c437badbd6a758cb0c0f Mon Sep 17 00:00:00 2001 From: Paolo Argentieri Date: Tue, 22 Sep 2026 10:16:13 -0700 Subject: [PATCH 05/20] nvmrc --- .github/workflows/main.yml | 8 ++++---- .github/workflows/security-scan.yaml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ccaf203d..c0079d55 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -36,7 +36,7 @@ jobs: - name: Setup Node.js environment uses: actions/setup-node@v6 with: - node-version: "24" + node-version-file: ".nvmrc" - name: npm ci run: npm ci @@ -152,7 +152,7 @@ jobs: - name: Setup Node.js environment uses: actions/setup-node@v6 with: - node-version: "24" + node-version-file: ".nvmrc" registry-url: "https://registry.npmjs.org" - name: set NpmPackageVersion environment @@ -205,7 +205,7 @@ jobs: - name: Setup Node.js environment uses: actions/setup-node@v6 with: - node-version: "24" + node-version-file: ".nvmrc" registry-url: "https://registry.npmjs.org" - name: "copy license" @@ -253,7 +253,7 @@ jobs: - name: Setup Node.js environment uses: actions/setup-node@v6 with: - node-version: "24" + node-version-file: ".nvmrc" registry-url: "https://registry.npmjs.org" - name: Npm install gulp diff --git a/.github/workflows/security-scan.yaml b/.github/workflows/security-scan.yaml index 8a67304a..8a5469c1 100644 --- a/.github/workflows/security-scan.yaml +++ b/.github/workflows/security-scan.yaml @@ -26,7 +26,7 @@ jobs: - name: Setup Node.js environment uses: actions/setup-node@v6 with: - node-version: "24" + node-version-file: ".nvmrc" - name: npm ci run: npm ci From b9c0fefa27be66c5d616fa6efc27385be7f7ba2d Mon Sep 17 00:00:00 2001 From: Paolo Argentieri Date: Tue, 29 Sep 2026 15:35:52 -0700 Subject: [PATCH 06/20] npm update --- package-lock.json | 941 +++++++++++++++++++++++----------------------- 1 file changed, 474 insertions(+), 467 deletions(-) diff --git a/package-lock.json b/package-lock.json index 193b61fc..d9cf520d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -578,16 +578,16 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "22.1.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-22.1.8.tgz", - "integrity": "sha512-Pv3cPa/44kvEwYcqwx4Ns5dhIDmcFNSHhbpheqiEG1Z/u4e2t4zHKDtE3eHZB+8o+IcC7xJj+d+AqGR44RoZDA==", + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-22.2.0.tgz", + "integrity": "sha512-yhp/LRzKHJOzo2gFm9+H5DKnsT9adi+ItO2pW0pW2B455sqZYE8RJaSku+TSlv+PvWSmbtFsPXNgSRLA6pSk8Q==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@angular-devkit/core": "22.1.8", + "@angular-devkit/core": "22.2.0", "jsonc-parser": "3.3.1", - "magic-string": "1.0.0", + "magic-string": "1.4.1", "ora": "9.4.1", "rxjs": "7.8.2" }, @@ -598,9 +598,9 @@ } }, "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { - "version": "22.1.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-22.1.8.tgz", - "integrity": "sha512-34lsgg2FwMVBX7nR/ZqzRUcdvdYPvSB8XAEr2GudXAyZwLI9ehzfQlagAWR/gEb8p4uCFZW0r7uU0toxydq4Rw==", + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-22.2.0.tgz", + "integrity": "sha512-dELBwXtJWUxFALdEVvdk8qK+XBa17EH5H9NZm+041/esjNi6SaZMusqBgr2PZKq7hD+O2jSCEHbey/hwkz2Awg==", "dev": true, "license": "MIT", "peer": true, @@ -608,9 +608,9 @@ "ajv": "8.20.0", "ajv-formats": "3.0.1", "jsonc-parser": "3.3.1", - "picomatch": "4.0.5", + "picomatch": "4.0.7", "rxjs": "7.8.2", - "source-map": "0.7.6" + "source-map": "0.8.0" }, "engines": { "node": "^22.22.3 || ^24.15.0 || >=26.0.0", @@ -683,9 +683,9 @@ } }, "node_modules/@angular-devkit/schematics/node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", "dev": true, "license": "MIT", "peer": true, @@ -696,10 +696,21 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/@angular-devkit/schematics/node_modules/source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0.tgz", + "integrity": "sha512-d8EqvL+k/SOXCreS/SUzg2ciyHqBBLcN/yuRjFsbvVhHTE2pgei7oAhmPM7kWFbkX6OSMQfUq4KbkF3au9lhYQ==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">= 12" + } + }, "node_modules/@angular-devkit/schematics/node_modules/string-width": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", - "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz", + "integrity": "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==", "dev": true, "license": "MIT", "peer": true, @@ -853,9 +864,9 @@ } }, "node_modules/@angular/animations": { - "version": "21.2.23", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-21.2.23.tgz", - "integrity": "sha512-hnDKa96XdTogqJRe91S/Pjr8Wgbgf9/7OszKW8MbMZE1Vy7qEmaA1JD86iSNp9QHZ9U/fPX7Wbpq2Zoa5dS2zg==", + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-21.2.24.tgz", + "integrity": "sha512-l83bg0i6tmBSmbf2GhpccnJp827RDq7uDbZf3vjWPPCzrQUeFNbUjYgzINzoLAbjhZMxEz6Z2ALgouRCXYJ83w==", "deprecated": "@angular/animations is deprecated. Use `animate.enter` and `animate.leave` instead. For more information see: https://v22.angular.dev/guide/animations.", "license": "MIT", "peer": true, @@ -866,7 +877,7 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "21.2.23" + "@angular/core": "21.2.24" } }, "node_modules/@angular/build": { @@ -1121,9 +1132,9 @@ } }, "node_modules/@angular/common": { - "version": "21.2.23", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.23.tgz", - "integrity": "sha512-IVhHD4w/+v/S7YAIyF3v20u3zpOj7Y8EuL9xxPyfyxlfz5zPpJFJ/GaZb0Y5sMANCFLVwQj3VcQNWgYtd7W2yA==", + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.24.tgz", + "integrity": "sha512-+olMzBBJHIGrFTUxKRksqtQ+KzBTifLOF+Er0ppRfjbTyYwdq4jfgZ9YjDQa00F/8Jcy2xzM1Nrlq5sIbqxAhg==", "license": "MIT", "peer": true, "dependencies": { @@ -1133,14 +1144,14 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "21.2.23", + "@angular/core": "21.2.24", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "21.2.23", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.23.tgz", - "integrity": "sha512-7HUdsXQKGPqKiRhwsbMGVqtMEVGT4qf5NKpLDmY4kLMeJhjRKchY/4cljEqUERvvXUid6GTWK+/tSJdIcFNnEw==", + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.24.tgz", + "integrity": "sha512-kvhstROpI9gZZ4QUcNkJaqA2LNis8XVTBz3X5SaKZAveUMB6r5V2akYqEBZcXNS4xUfST/UttrUsVdRvpcIItw==", "license": "MIT", "peer": true, "dependencies": { @@ -1151,9 +1162,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "21.2.23", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.23.tgz", - "integrity": "sha512-/dtKObY5fvBuNMxLFe9jtnsMwaDV2zm+5sKP2EIWtDO0N18WlZSOFCTL6Tkz3LHE/4y+TjW46POu/rz0q/Cw6A==", + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.24.tgz", + "integrity": "sha512-oUk8IgWG5NXH3ZyqzRPxs9ylfe6K0p+mP89y023+/AF4A1Fse3V+tfjRxvq5gnlSyJm3yRl74W5SwsCi1kxxxA==", "dev": true, "license": "MIT", "peer": true, @@ -1175,7 +1186,7 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "21.2.23", + "@angular/compiler": "21.2.24", "typescript": ">=5.9 <6.1" }, "peerDependenciesMeta": { @@ -1185,9 +1196,9 @@ } }, "node_modules/@angular/core": { - "version": "21.2.23", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.23.tgz", - "integrity": "sha512-O8i8ntukAhg3nM9y9A/o1eXVFnFk5/VltA2gQrDuWTpIPLyWmyZW+Zb65UBJI14tGOTt99Y3l3teIuF36mLBgQ==", + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.24.tgz", + "integrity": "sha512-wCSCNrcBolr2iws6eX8yMnePXvXMHzi3kFla7EoHiKGJBhKHz4g2+p5f4z/Q5mHVCglTsXEOldDhgFTv5pDDoQ==", "license": "MIT", "peer": true, "dependencies": { @@ -1197,7 +1208,7 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "21.2.23", + "@angular/compiler": "21.2.24", "rxjs": "^6.5.3 || ^7.4.0", "zone.js": "~0.15.0 || ~0.16.0" }, @@ -1211,9 +1222,9 @@ } }, "node_modules/@angular/elements": { - "version": "21.2.23", - "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-21.2.23.tgz", - "integrity": "sha512-Z9wk2EqFgQuO6uDdu3ytJ7nVfarWAEf28u228lQpt1dhuqTf2wHlH7PjkROPsxHYv+dxYMlTU5jlK/gWlHMCtg==", + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-21.2.24.tgz", + "integrity": "sha512-ldhDze8yB9FzKgXSX+6MZD7QzPRe9hSzHbnmTSGUfmSU72B8aMuN/mog+d9GXYv+UeF3D401a3ELbi/Llfqtpw==", "license": "MIT", "peer": true, "dependencies": { @@ -1223,14 +1234,14 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "21.2.23", + "@angular/core": "21.2.24", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/forms": { - "version": "21.2.23", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.23.tgz", - "integrity": "sha512-l0PyfoCO6MflgQwL4spawbiTqzSrlOWUn1BUcbGuBU33lbgTBrR9dogfT8sQ54ZO/6gcWkToxi0WbvugSfzQtQ==", + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.24.tgz", + "integrity": "sha512-1hOdu2dOjcVvYtcgdheEfin0nGj74YETHKhhG1iB1foqb70J6P/TfyXzTaiWr56cF0Dek1T3f9BjKE/KEFDUbw==", "license": "MIT", "peer": true, "dependencies": { @@ -1241,9 +1252,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "21.2.23", - "@angular/core": "21.2.23", - "@angular/platform-browser": "21.2.23", + "@angular/common": "21.2.24", + "@angular/core": "21.2.24", + "@angular/platform-browser": "21.2.24", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -1266,9 +1277,9 @@ } }, "node_modules/@angular/platform-browser": { - "version": "21.2.23", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.23.tgz", - "integrity": "sha512-3/yTsYroz6xjH1sqxJwOcBdLEGU4QLouu5z1ja/JN7jrPUfRHj2YBfVS+ayWLEnMt9CfuyjZxoVPXHtWuZ3Gog==", + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.24.tgz", + "integrity": "sha512-ffxWfxhMeedWXNASBtEg8AShG8ccWA/48Vp/rQVEhlj/CeydXTNdGmiu6oERQ5my4nOk+xJJ4/BnkQ3fSozrfQ==", "license": "MIT", "peer": true, "dependencies": { @@ -1278,9 +1289,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/animations": "21.2.23", - "@angular/common": "21.2.23", - "@angular/core": "21.2.23" + "@angular/animations": "21.2.24", + "@angular/common": "21.2.24", + "@angular/core": "21.2.24" }, "peerDependenciesMeta": { "@angular/animations": { @@ -1289,9 +1300,9 @@ } }, "node_modules/@angular/router": { - "version": "21.2.23", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-21.2.23.tgz", - "integrity": "sha512-cNwTd1XvCXsFZqvn4WFPv7VUci7PJzlK9Ex/git3oEyS9318sJjX7sw2IeTpvwIg01BZtF1xBvWgMTHgcXvzIA==", + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-21.2.24.tgz", + "integrity": "sha512-E72AvyTRGv5rDa/SlfSztThJ+9SemjnblzB9jTb8LJOFPo7u4GlfytvRE8DnxwmTfnlZcA6Sr10zlSDnL4pmyw==", "license": "MIT", "peer": true, "dependencies": { @@ -1301,9 +1312,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "21.2.23", - "@angular/core": "21.2.23", - "@angular/platform-browser": "21.2.23", + "@angular/common": "21.2.24", + "@angular/core": "21.2.24", + "@angular/platform-browser": "21.2.24", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -3077,9 +3088,9 @@ } }, "node_modules/@csstools/css-calc": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.4.0.tgz", - "integrity": "sha512-XQKj5B7QiZcHiegCOCAzcAOJdhGgWOHbbu62h5e5mkHnn8lWcfiJhllkqWmxu5zWR9jucPHuo1iTB56P033hcg==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.4.1.tgz", + "integrity": "sha512-EtC7SoN1j6J4E4DCwg5QgbO5TGxgxIA1RXqe+W+qUM+BUcezx9wT+/tiQ/WO2yCX4i5X+Cuf9ciJ22aP4UEwWw==", "dev": true, "funding": [ { @@ -3096,14 +3107,14 @@ "node": ">=20.19.0" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^4.0.0", - "@csstools/css-tokenizer": "^4.0.0" + "@csstools/css-parser-algorithms": "^4.0.1", + "@csstools/css-tokenizer": "^4.0.2" } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", - "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.1.tgz", + "integrity": "sha512-ShL8BqPfbKJrJiKFH0xBbN0i7Nrh9HXYRuF+pzyj93R/BL2YAsUxJeqANErzqM+0JGl7vjHp+3OIgd/DL69YIA==", "dev": true, "funding": [ { @@ -3120,7 +3131,7 @@ "node": ">=20.19.0" }, "peerDependencies": { - "@csstools/css-tokenizer": "^4.0.0" + "@csstools/css-tokenizer": "^4.0.2" } }, "node_modules/@csstools/css-syntax-patches-for-csstree": { @@ -3149,9 +3160,9 @@ } }, "node_modules/@csstools/css-tokenizer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.1.tgz", - "integrity": "sha512-bPlN9S9O1A0euCpEWE4qnvB5YDuyYVsUTrxSgmAM1Is0j4tICHoVyOVAXfWMP/kS9ZrjvyIXWV2PmomiAXXqOw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.2.tgz", + "integrity": "sha512-OoKoR0f76dCY666JlcbhmVTs2drYj1GUXZTYTcbUgJjh9Nv41aFfZ21bPQTERm5+L5cBDo466NltB2lplS5GBw==", "dev": true, "funding": [ { @@ -3169,9 +3180,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-5.0.0.tgz", - "integrity": "sha512-T9lXmZOfnam3eMERPsszjY5NK0jX8RmThmmm99FZ8b7z8yMaFZWKwLWGZuTwdO3ddRY5fy13GmmEYZXB4I98Eg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-5.0.1.tgz", + "integrity": "sha512-DR5NpEOOxDOhmMWPJlhYAV9gTmV4XpfYjtE+aXSCurkxS65KzNogI4wqzRIoujieQcmFkeRtK1nRIF8ImUZTDg==", "dev": true, "funding": [ { @@ -3188,14 +3199,14 @@ "node": ">=20.19.0" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^4.0.0", - "@csstools/css-tokenizer": "^4.0.0" + "@csstools/css-parser-algorithms": "^4.0.1", + "@csstools/css-tokenizer": "^4.0.2" } }, "node_modules/@csstools/selector-resolve-nested": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-4.0.1.tgz", - "integrity": "sha512-j3vdQu0XwLME5qOTWxm8cnmvsf423R2YL6DbKklCHZwkDm7UdKNu6RPlw4REIJhSlKBICY3B70/7QZdicLqZgg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-4.0.2.tgz", + "integrity": "sha512-JpjNBJFA+4OnAHKRK4AMp8xrYyLhI9XapOeBlP2PhRU/IylSw+1ep3BFNTksBJnrTS3KT6kqKNVfpzLLwZUW5Q==", "dev": true, "funding": [ { @@ -4456,14 +4467,14 @@ } }, "node_modules/@jsonjoy.com/fs-core": { - "version": "4.78.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.78.1.tgz", - "integrity": "sha512-UUGcxEah6eb6PyrF8RDEuVgR0Cs2K6XTiLH7YxNR3DknL3wZCNx1nU5m2Gq5Wq8ipy4uHDay3xt/50KyoTN6Zg==", + "version": "4.79.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.79.0.tgz", + "integrity": "sha512-bxSwMrDY71OjEdj2mAYBxSe4BnHtAOjOxqUoFJc0WsllcGgA8iYl6wRF+4aVdFUjjEyHfBwxVv0QqW4AweIUZw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.78.1", - "@jsonjoy.com/fs-node-utils": "4.78.1", + "@jsonjoy.com/fs-node-builtins": "4.79.0", + "@jsonjoy.com/fs-node-utils": "4.79.0", "thingies": "^2.5.0" }, "engines": { @@ -4478,15 +4489,15 @@ } }, "node_modules/@jsonjoy.com/fs-fsa": { - "version": "4.78.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.78.1.tgz", - "integrity": "sha512-PaoXI4HAELQ/DYxCtqHne7ijrTE0BIEFYXI/qTy4f6pThXiYT5QyJkk96bzpcjdo2D+OM0pUv7mkwffSAl/GSQ==", + "version": "4.79.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.79.0.tgz", + "integrity": "sha512-EdadmStAvZw4jYg4iW3mDxBmzMFSI8jcHQkSl+rIQIO7dWbPdXaB83PBQhNCCtMBeX7zwcOFjpp0ecXqbYbjUA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.78.1", - "@jsonjoy.com/fs-node-builtins": "4.78.1", - "@jsonjoy.com/fs-node-utils": "4.78.1", + "@jsonjoy.com/fs-core": "4.79.0", + "@jsonjoy.com/fs-node-builtins": "4.79.0", + "@jsonjoy.com/fs-node-utils": "4.79.0", "thingies": "^2.5.0" }, "engines": { @@ -4501,17 +4512,17 @@ } }, "node_modules/@jsonjoy.com/fs-node": { - "version": "4.78.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.78.1.tgz", - "integrity": "sha512-3z6o4qVdKUZTHNXiV+3bKAUkQSD5a2kFwwwag8fe6VvgZ4WNfDbMzWdGvoGx+oRpOcr1iWA9WYwVeVMjSir4mA==", + "version": "4.79.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.79.0.tgz", + "integrity": "sha512-/k18aT1X+A2yLdlTe3WKpL5y2qrvbcUY1BXA4A+s8fBfTeXfi+xdvEB85JVXVf2i9kzASQZFx8dHw9OchgMUhQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.78.1", - "@jsonjoy.com/fs-node-builtins": "4.78.1", - "@jsonjoy.com/fs-node-utils": "4.78.1", - "@jsonjoy.com/fs-print": "4.78.1", - "@jsonjoy.com/fs-snapshot": "4.78.1", + "@jsonjoy.com/fs-core": "4.79.0", + "@jsonjoy.com/fs-node-builtins": "4.79.0", + "@jsonjoy.com/fs-node-utils": "4.79.0", + "@jsonjoy.com/fs-print": "4.79.0", + "@jsonjoy.com/fs-snapshot": "4.79.0", "glob-to-regex.js": "^1.3.1", "thingies": "^2.5.0" }, @@ -4527,9 +4538,9 @@ } }, "node_modules/@jsonjoy.com/fs-node-builtins": { - "version": "4.78.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.78.1.tgz", - "integrity": "sha512-yaGM1l77yYANFl+w2gdixRZhcQhKodtbI4FZgJg2ApfTTSJcxdYEekU+Ta92sCqSwrOtY+ru4IP81tgJxWXIyA==", + "version": "4.79.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.79.0.tgz", + "integrity": "sha512-LoBHewVHp/bZQ8Om1Iivl6NEHg7Mmby9kXJZysfnHYW4256rzXFSEcEpto1qgSAka+sq2v4N/Cnl562Z15MByA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4544,15 +4555,15 @@ } }, "node_modules/@jsonjoy.com/fs-node-to-fsa": { - "version": "4.78.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.78.1.tgz", - "integrity": "sha512-/Z00TkjLD8zPRimbINaiAQRqpE9HZmiGfxQFMqNcHncmhijS3JsAW21gcNO/16jujoDwXOyEaSSeK+pBtv8QHQ==", + "version": "4.79.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.79.0.tgz", + "integrity": "sha512-xFza/t81sVL4rik7h3SlcymC6X7pvNllI88LW1GESEANDXinf5lZoqju59i3AsGLyy4i0eBQvPiizWSMwCunQA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-fsa": "4.78.1", - "@jsonjoy.com/fs-node-builtins": "4.78.1", - "@jsonjoy.com/fs-node-utils": "4.78.1" + "@jsonjoy.com/fs-fsa": "4.79.0", + "@jsonjoy.com/fs-node-builtins": "4.79.0", + "@jsonjoy.com/fs-node-utils": "4.79.0" }, "engines": { "node": ">=10.0" @@ -4566,13 +4577,13 @@ } }, "node_modules/@jsonjoy.com/fs-node-utils": { - "version": "4.78.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.78.1.tgz", - "integrity": "sha512-wm0PVK6XpjHH6GLGVi60+ubD7pNv91KwQ8SBWwn+orRTYdfEIci59/VlOddIGhUSde0t9W9gLNetlPKQHQJsSQ==", + "version": "4.79.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.79.0.tgz", + "integrity": "sha512-Rj/WevHB8DV8VyEvFGSvDD3m3JHOVk3fO1biH26iworL9/rqdUMKQQeyiKTLbdf3Z9s9vVZnn8ZC0FWZgtO2mg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.78.1", + "@jsonjoy.com/fs-node-builtins": "4.79.0", "glob-to-regex.js": "^1.3.1" }, "engines": { @@ -4587,13 +4598,13 @@ } }, "node_modules/@jsonjoy.com/fs-print": { - "version": "4.78.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.78.1.tgz", - "integrity": "sha512-NUwSD+BOz0TUpBc+riQpI1G1vOhViSZePeqUPxKznelsk3Iwotu6T/02UAY9WdaGcLdlDX8pllEIyxehnYo9Ng==", + "version": "4.79.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.79.0.tgz", + "integrity": "sha512-Bp5Q+OV1Dnl8oKf8hVhmboeI+NWbWRk1GxtJzuRvopDeNBDBh0RLevEsfnOVtwBwgRZaptSXn3e/mm3kbOzfDw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-utils": "4.78.1", + "@jsonjoy.com/fs-node-utils": "4.79.0", "tree-dump": "^1.1.0" }, "engines": { @@ -4608,14 +4619,14 @@ } }, "node_modules/@jsonjoy.com/fs-snapshot": { - "version": "4.78.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.78.1.tgz", - "integrity": "sha512-gejpLh45sgYGEHWZP/LP2etxaUOYawDfbFVckl9xDDEvgSAtZf700MzCAGbPBPBzRL+qW5UDDwacIgYXHY3C9Q==", + "version": "4.79.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.79.0.tgz", + "integrity": "sha512-/GY+eMvOl4ZQHUnrKYjC/t3N0BImBg7zv/cAGm3kiwUfqSQuo87jtbjmD3mzgQMv16K8zttkHE2wT9GaVsehvA==", "dev": true, "license": "Apache-2.0", "dependencies": { "@jsonjoy.com/buffers": "^17.65.0", - "@jsonjoy.com/fs-node-utils": "4.78.1", + "@jsonjoy.com/fs-node-utils": "4.79.0", "@jsonjoy.com/json-pack": "^17.65.0", "@jsonjoy.com/util": "^17.65.0" }, @@ -5012,19 +5023,19 @@ ] }, "node_modules/@microsoft/api-extractor": { - "version": "7.59.1", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.59.1.tgz", - "integrity": "sha512-GjRUqx1MTY7xuH36urwASkfBPzrdxYG+irVeV7C9JEdRtn509AgMmwit/BhvztQzIoFk9vhFDTVYOp2cjw+9Uw==", + "version": "7.59.2", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.59.2.tgz", + "integrity": "sha512-hhkH6p2AmJtneC1cyxDTzUBg3DJHxvsCW5ciTrFSY8H9nTWB+lwa1nmmmTAqNFc9mufMATlH6hwdOI/Jc1wjfw==", "dev": true, "license": "MIT", "dependencies": { - "@microsoft/api-extractor-model": "7.33.12", - "@microsoft/tsdoc": "~0.16.0", - "@microsoft/tsdoc-config": "~0.18.1", - "@rushstack/node-core-library": "5.24.1", + "@microsoft/api-extractor-model": "7.33.13", + "@microsoft/tsdoc": "~0.17.0", + "@microsoft/tsdoc-config": "~0.18.2", + "@rushstack/node-core-library": "5.24.2", "@rushstack/rig-package": "0.7.3", - "@rushstack/terminal": "0.24.4", - "@rushstack/ts-command-line": "5.3.14", + "@rushstack/terminal": "0.24.5", + "@rushstack/ts-command-line": "5.3.15", "diff": "~8.0.2", "minimatch": "10.2.3", "resolve": "~1.22.1", @@ -5040,15 +5051,15 @@ } }, "node_modules/@microsoft/api-extractor-model": { - "version": "7.33.12", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.33.12.tgz", - "integrity": "sha512-TdKOYgwf98xLjNW+y3iXIiCf4ZLQbilGAlqkMTTAqqAWfgRXAn9YCSGMsaiB1U7OPRvslUWg6n08EqQPbP93tA==", + "version": "7.33.13", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.33.13.tgz", + "integrity": "sha512-OVL/dDvHstFJMJb2amgI7S9p9wAVMyrt18R2aSBOP9tVAARWiEJAM3wVsgxXymMOvnvKO/np9X7PeJpNZv3eLg==", "dev": true, "license": "MIT", "dependencies": { - "@microsoft/tsdoc": "~0.16.0", - "@microsoft/tsdoc-config": "~0.18.1", - "@rushstack/node-core-library": "5.24.1" + "@microsoft/tsdoc": "~0.17.0", + "@microsoft/tsdoc-config": "~0.18.2", + "@rushstack/node-core-library": "5.24.2" }, "engines": { "node": ">=20.9.0" @@ -5065,9 +5076,9 @@ } }, "node_modules/@microsoft/tsdoc": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.16.0.tgz", - "integrity": "sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.17.0.tgz", + "integrity": "sha512-p68VexhnH7ojf3U27RdryUDqnKJgKaWUbCL96vJR7N0mqDuhKG5OIECk3sCPPdynxjk+yoVhRkScqtv5KQjzsw==", "dev": true, "license": "MIT" }, @@ -5084,13 +5095,6 @@ "resolve": "~1.22.2" } }, - "node_modules/@microsoft/tsdoc-config/node_modules/@microsoft/tsdoc": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.17.0.tgz", - "integrity": "sha512-p68VexhnH7ojf3U27RdryUDqnKJgKaWUbCL96vJR7N0mqDuhKG5OIECk3sCPPdynxjk+yoVhRkScqtv5KQjzsw==", - "dev": true, - "license": "MIT" - }, "node_modules/@modelcontextprotocol/sdk": { "version": "1.30.0", "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.30.0.tgz", @@ -5620,13 +5624,13 @@ } }, "node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", "dev": true, "license": "MIT", "engines": { - "node": ">= 16" + "node": "^14.21.3 || >=16" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -6203,15 +6207,15 @@ "optional": true }, "node_modules/@peculiar/asn1-cms": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.9.4.tgz", - "integrity": "sha512-cben7oxmQsUGZqotus7yt0srYdncOT6RNWcTQ77T2RFOXejYVYkXadrfePdRcrVpO9K95IRLKKglG2k38jKXuw==", + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.9.5.tgz", + "integrity": "sha512-4Ivz0fsyFofe0bslNsYcGN9+iETdHX4v+BFwIPr+K/BAt61sHXECP63ff9FntU9zcfVQELJFdUG9so44OjUlBQ==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.9.4", - "@peculiar/asn1-x509": "^2.9.4", - "@peculiar/asn1-x509-attr": "^2.9.4", + "@peculiar/asn1-schema": "^2.9.5", + "@peculiar/asn1-x509": "^2.9.5", + "@peculiar/asn1-x509-attr": "^2.9.5", "asn1js": "^3.0.10", "tslib": "^2.8.1" }, @@ -6220,14 +6224,14 @@ } }, "node_modules/@peculiar/asn1-csr": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.9.4.tgz", - "integrity": "sha512-xd4YN4vpRjkDAQWVfZZkeu12IEND7DOpkqaHSIHxZl1uggUNa9Ju0QxY2jHvDAS9pP0zhRBytg8ifsnGo3V0jw==", + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.9.5.tgz", + "integrity": "sha512-9dO6PcoJeI+1xJ4rG7eINMa6f9Ix/QdRs5UGZ0D7v/R3TzmsbVr5cqAgfYw4xgS9U54ouHYqEz0bIZBbM/UY1g==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.9.4", - "@peculiar/asn1-x509": "^2.9.4", + "@peculiar/asn1-schema": "^2.9.5", + "@peculiar/asn1-x509": "^2.9.5", "asn1js": "^3.0.10", "tslib": "^2.8.1" }, @@ -6236,14 +6240,14 @@ } }, "node_modules/@peculiar/asn1-ecc": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.9.4.tgz", - "integrity": "sha512-JJXefFshRAuVAjWQo/39bkg1ywc1VaiO44S8RRC+Ykvf/u2KDmYffoDb0ZBPCR5uJy4AGKQhl8mX+Q8ShcWaXQ==", + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.9.5.tgz", + "integrity": "sha512-OD+HLlcV7wCL64w0rheX/C0J31DbJce0nf8ulv3UNftQ617JEZE3sQ4cMN6PotXWlJ1M5GQx90G3bywtdKOstw==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.9.4", - "@peculiar/asn1-x509": "^2.9.4", + "@peculiar/asn1-schema": "^2.9.5", + "@peculiar/asn1-x509": "^2.9.5", "asn1js": "^3.0.10", "tslib": "^2.8.1" }, @@ -6252,16 +6256,16 @@ } }, "node_modules/@peculiar/asn1-pfx": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.9.4.tgz", - "integrity": "sha512-khuGzHTzNzk4GDlIBEILyIs6Lce0yn0ZBdoI9v93kmNncfZRhD+AQ5ODFqdhvoE8cMJF/JMTQ8yA+t1D14kqCw==", + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.9.5.tgz", + "integrity": "sha512-btcH7lbcD4410qnjHvv7F0kEuMNKbX8CFAZSs9CDPWHKzT1byLPHYeR40AnUw9z4CzsijMY0daBFYUvVx75sdA==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-cms": "^2.9.4", - "@peculiar/asn1-pkcs8": "^2.9.4", - "@peculiar/asn1-rsa": "^2.9.4", - "@peculiar/asn1-schema": "^2.9.4", + "@peculiar/asn1-cms": "^2.9.5", + "@peculiar/asn1-pkcs8": "^2.9.5", + "@peculiar/asn1-rsa": "^2.9.5", + "@peculiar/asn1-schema": "^2.9.5", "asn1js": "^3.0.10", "tslib": "^2.8.1" }, @@ -6270,14 +6274,14 @@ } }, "node_modules/@peculiar/asn1-pkcs8": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.9.4.tgz", - "integrity": "sha512-duRdotlUx9eDZe6QrQpQKl61RbWykCHBCkKayP8V8XdEFwlKHZ8qGGDMyS6Pye7OX7nLFttTTpRkJeet78ckwQ==", + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.9.5.tgz", + "integrity": "sha512-c7UghAGQdBfAHL9JdwcJkAc/lDJKNXfCdYXPXlf8BZdD/fVJjJnXKHxX4gyLhkFTvnGhME7caieSgc2ROtqYTQ==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.9.4", - "@peculiar/asn1-x509": "^2.9.4", + "@peculiar/asn1-schema": "^2.9.5", + "@peculiar/asn1-x509": "^2.9.5", "asn1js": "^3.0.10", "tslib": "^2.8.1" }, @@ -6286,18 +6290,18 @@ } }, "node_modules/@peculiar/asn1-pkcs9": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.9.4.tgz", - "integrity": "sha512-kaL4cNxBpdQE2dKlyZBqz4ygCrwffO+8wfoxTEqM1Z8RadvCeELBRzcv0dzM8aY9azHMwODO5nxU65zXmhToOQ==", + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.9.5.tgz", + "integrity": "sha512-4R/zMgLSHbQIZRBwP1KzX6iuNHmW3xFWwu9TS9A00N60fmQqp9DkkqnQFyd0mAYMQTrQefuzQ/yP4U8sOLGUgQ==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-cms": "^2.9.4", - "@peculiar/asn1-pfx": "^2.9.4", - "@peculiar/asn1-pkcs8": "^2.9.4", - "@peculiar/asn1-schema": "^2.9.4", - "@peculiar/asn1-x509": "^2.9.4", - "@peculiar/asn1-x509-attr": "^2.9.4", + "@peculiar/asn1-cms": "^2.9.5", + "@peculiar/asn1-pfx": "^2.9.5", + "@peculiar/asn1-pkcs8": "^2.9.5", + "@peculiar/asn1-schema": "^2.9.5", + "@peculiar/asn1-x509": "^2.9.5", + "@peculiar/asn1-x509-attr": "^2.9.5", "asn1js": "^3.0.10", "tslib": "^2.8.1" }, @@ -6306,14 +6310,14 @@ } }, "node_modules/@peculiar/asn1-rsa": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.9.4.tgz", - "integrity": "sha512-pZ96eD1PptovcWQ/GSmuNFXd/7EQJNlKfDaNCyE2rx3W0v6QFelkzquVqRSRyyDXXCYD69ZXJDzZ8GhIiQzKoA==", + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.9.5.tgz", + "integrity": "sha512-kHwBLVMkm9ljlM521ovS7y4z4mr8xuHTdNyyoPlDvckBwFKSgs9HqKBryLBeqHqL2YpIgl+Vspl7kzNGG2phzA==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.9.4", - "@peculiar/asn1-x509": "^2.9.4", + "@peculiar/asn1-schema": "^2.9.5", + "@peculiar/asn1-x509": "^2.9.5", "asn1js": "^3.0.10", "tslib": "^2.8.1" }, @@ -6322,9 +6326,9 @@ } }, "node_modules/@peculiar/asn1-schema": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.9.4.tgz", - "integrity": "sha512-GjzePcT9Iw8NzeOPf73iNS9xM+TBhd/FilAfP+RQGkTMQJTVWtytN3JHJACCjf/ABNau5S7mS3g+DcuxmRgYEg==", + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.9.5.tgz", + "integrity": "sha512-Ez3wLKVjaxdsLcgeWN4OE31QkM7oBOgKuuBJxldRYAkfYw2C+8zJPcSd/SThnbhszsEOlAmoaS5kIIkN29fGKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6337,13 +6341,13 @@ } }, "node_modules/@peculiar/asn1-x509": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.9.4.tgz", - "integrity": "sha512-CxhBo/RdEbMMob7T31ZdQjGuoyRFLVwrDzTn25bihzBasRg9kRm/0IxIPvhgQtcK/9dNcO1XQL2fuPugwELL0Q==", + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.9.5.tgz", + "integrity": "sha512-NP3ecvN6zTDlwCvogIWL7MJN9AZNuskkIbnlhrlkB97Mn2EqirBUQ8GKzsOmdAL3pRvjGu1Uk/a4DNfiZrWxhw==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.9.4", + "@peculiar/asn1-schema": "^2.9.5", "@peculiar/utils": "^2.0.2", "asn1js": "^3.0.10", "tslib": "^2.8.1" @@ -6353,14 +6357,14 @@ } }, "node_modules/@peculiar/asn1-x509-attr": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.9.4.tgz", - "integrity": "sha512-ehQXbpQaQYycgu8OrvigwSPTFfVRcu0ECNYCWw+yzBp02Lw5paRqzzhUpfOgO2K38+WfFZuEz/0RPtam5g0OMg==", + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.9.5.tgz", + "integrity": "sha512-PlbL1a74RZiry7puPCZ5hdk/puvivxYJPbjadr2i7DBjHCJFEKCfTRPKL3DILeZFtzJjn95J5EBtSc4/TB9/6Q==", "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.9.4", - "@peculiar/asn1-x509": "^2.9.4", + "@peculiar/asn1-schema": "^2.9.5", + "@peculiar/asn1-x509": "^2.9.5", "asn1js": "^3.0.10", "tslib": "^2.8.1" }, @@ -6700,9 +6704,9 @@ "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.63.3.tgz", - "integrity": "sha512-w3Jnvi1ocaVm/c7yVPpfB98XeSRBMyzp6njL5MVVbGyXjpmUkN+s6Hp4t0PqhGCCaI1ZHMKXt/w0lA1RCaLVcw==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.63.5.tgz", + "integrity": "sha512-J25QJU+B78T4FhhBsNpLJyVWOi31mwtpcMwywHmOKH65Q9IWGA81gPj+dnwlhU8wktVriYE+tFAaQgrnJRzAZg==", "cpu": [ "arm" ], @@ -6714,9 +6718,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.63.3.tgz", - "integrity": "sha512-uI/ESiaIbbRYAEhzy8PCUWDp1hB0bjAqM06mW9flOoNO4Q8DQpeoREhBR5Hegfl+wpXiguyJv6XSPzEN7OxyHQ==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.63.5.tgz", + "integrity": "sha512-LDopB3zuZM5Ux9TT2luNEBJW/tYbGU2g1d+VpKk6I+gSKDb+/7sYE6M225gRQt4RbMX6MSwMsVR/phdjVUgRLg==", "cpu": [ "arm64" ], @@ -6728,9 +6732,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.63.3.tgz", - "integrity": "sha512-oxhrd1jmXLwWZ83eQYDXxuqRdkqkzrjR3JobKeuUyfdNZo11FuQIvqEOZhyIT7OBHxXoGslDDjN0cQcM6T0TqQ==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.63.5.tgz", + "integrity": "sha512-wlJEERGfeuHeBavCL2qVnNacOK43NDoZM4sjkeRPymd04OAE9T1zBqDJgmZ+CIsPTYKwdzpUC8vmOw84dwY4Tg==", "cpu": [ "arm64" ], @@ -6742,9 +6746,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.63.3.tgz", - "integrity": "sha512-7/YiIMghVE8DrxKvNdorAaJVdriOFgOIpdStnPx8ppx5zfTwC3jBCSEAIzB7JD5404m65THl6H93UTTVUvypmg==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.63.5.tgz", + "integrity": "sha512-4nJJGg5jbo2wwPP4JP+LfEBA3bvP8rU9CLuhp7jWvq9sxEyhjQFTFdrqi+/dHEin/pd8jpT0vcehIpnZtmEdcQ==", "cpu": [ "x64" ], @@ -6756,9 +6760,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.63.3.tgz", - "integrity": "sha512-GXFZRRoMAytaI5z6N3Zhfw0WL18Q0M8r95D5hlC4GqE/lGk8pbSJNUBoOWDfbm6dTciqHj2nU87tI5f6XhQiOg==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.63.5.tgz", + "integrity": "sha512-DrZbyCDF1hneuO6jRbvZ2D7+PIBM6yIwYnJpg2vIk58T+wuFpiaGZrfUr59lDWw45bg+IrpTGLPiNi/Fk4w3Cg==", "cpu": [ "arm64" ], @@ -6770,9 +6774,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.63.3.tgz", - "integrity": "sha512-77W+8X3ddYgPxUpB8nZFQs2Mq+wc4HVlcSRtApXLjYBcnPMkttrSnU8VwKQjeWYhMsITHFs5cWBQ8vz1Q+5RHQ==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.63.5.tgz", + "integrity": "sha512-gqfUVMJMB3mehqywxp6hTBFfgtMQykZY19+cfiaYP0toIJLb/1DZRJHVkQQGP13W4TAwfZDWeg1qBcheTRioXQ==", "cpu": [ "x64" ], @@ -6784,9 +6788,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.63.3.tgz", - "integrity": "sha512-FVkwK+iUC+mq+GipVK46rRVticfAPtvPUNlqlGXUDxdVk/UGjQiiiUVPUrEXdSpU2ufU0XxLGyTqDtBidDOVmg==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.63.5.tgz", + "integrity": "sha512-CFmhpvAwzSaWMlN3VN7UtmoTihlZNzoP0juQib5TQRnYUyDV8dXeWOp29sobWAT6gXl/hQgAClLlEiYozQG3OQ==", "cpu": [ "arm" ], @@ -6801,9 +6805,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.63.3.tgz", - "integrity": "sha512-+aGU1t3398yQOVj1Bz8o3e+KtswxAPvO+mtxtNdfXYMkXIHu7XhhkCD7/DEH9q8tF8uhDnMWvfpUKI8y1sZJsg==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.63.5.tgz", + "integrity": "sha512-Uc9H8eXCOayV6JLTH5bXKMId6qbhNHa818/BgYjm4jrlq3vZquC9cqyvHBw17xy5Mnj5f+I3gFK5JcEf3hSqrw==", "cpu": [ "arm" ], @@ -6818,9 +6822,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.63.3.tgz", - "integrity": "sha512-cR0kjpRXR2KJ2oQK8E2KTPtphs+b9hZ8IhTZubNryt/RsqgdOZBQ2Zq0q5UedtiIi0rs3jVhJh55RE1ZHUVGUA==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.63.5.tgz", + "integrity": "sha512-VcPr/szv/1BFw112Kt//fxulXt/JPqzzidU84iW68L2DdjnOO8QFUv2zTSYBEPHD6movBD4z+bbr5y60GYM7Jw==", "cpu": [ "arm64" ], @@ -6835,9 +6839,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.63.3.tgz", - "integrity": "sha512-y1RYi4Q3/9ByVWSSt9kX2ustE0B7kFYbJ6zZdVZVyqopZs3yhCTwRfrjIX4vezUJInma/Gs6BOFDJg7yZmJ0IQ==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.63.5.tgz", + "integrity": "sha512-BnxtJ5/91BrIHYIkGrmjz/lbMhqEHt1dPFqIxIFR+jPn0xVc/oUSCtIT089zfp5ufwGDlYz2UC+Fe1SRBpYFbQ==", "cpu": [ "arm64" ], @@ -6852,9 +6856,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.63.3.tgz", - "integrity": "sha512-DNhEA5viIj3Z5bZLE4z4oV8N5ozWqDwyt7T6KG7VdLDJ0nW+rNOYlphBl4/3HQkK75qipPLsVOfStHHOwN9WSg==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.63.5.tgz", + "integrity": "sha512-LrYcHZwF+fAMNKHYTOQ5osWM4AZF7YF6D+XtsjDyEvljtt11twc+zHVXBLNEjxVSUnKYsOhvVz4Z213eW02COQ==", "cpu": [ "loong64" ], @@ -6869,9 +6873,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.63.3.tgz", - "integrity": "sha512-17gQCqrIpXBX2Cmi9/TygnVOqGbzsba/iaqcYSL8FY7lNugg+7AiYNs5c5nKWD+NRQha36Sa0CqkJqH4XVHwnQ==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.63.5.tgz", + "integrity": "sha512-nj7QKQePAAUpCpJHtg0pR0W/b92A9NO17JS3BAQmHDn/yhmkir2p8llrKY9TOhleKIaSzy1JhxS3T9FVld6coA==", "cpu": [ "loong64" ], @@ -6886,9 +6890,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.63.3.tgz", - "integrity": "sha512-6LwVnZRIyINpdku/yOcI8Tm9YqLmhHK5emmlOOnW9tO0SYEm1FmKPcsSAGp0NBlqR2P04xaND4jvN6sTHqhq8A==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.63.5.tgz", + "integrity": "sha512-5ylkX6dWMeBKge9nTU+Rxfb+ZfaCIJ9lRqIFaK0eAMcWp7OJbYnLveLgXmm0VrvuLKb8qIK+mHyH0qu88RM+iA==", "cpu": [ "ppc64" ], @@ -6903,9 +6907,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.63.3.tgz", - "integrity": "sha512-xMUqkTXlEUtI/p5AAukMwBRr1enU3efsTeF+bskeFfk8t1C9rcC8sLREcZXmTfAXEbvRdJVSonVJez3TMlbR3w==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.63.5.tgz", + "integrity": "sha512-oHK4ZHYFDKjZviK34I+NwgfbGxgI7ztrNxj2hPTSSNFgeq1a/lEd7dHV2fdGAuTH4Iym3RHJg+vAbWaWG4B7Zg==", "cpu": [ "ppc64" ], @@ -6920,9 +6924,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.63.3.tgz", - "integrity": "sha512-S3E94co9F9WRRqEaUoQZ38K1gCz6KiM+nL7/3ijq7fDGF3OznjS5TasgYITlvl27GQKtu4lOAOsr5MFwkijvOA==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.63.5.tgz", + "integrity": "sha512-UcetmHZ6XOXuUByiKZyQmb55ZPr0LABr3Ec/HB9wKZn6CEAFWZkE+hsJErJ9hbPBC7nI0dKuELx7CoV6IM7TMg==", "cpu": [ "riscv64" ], @@ -6937,9 +6941,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.63.3.tgz", - "integrity": "sha512-1QtRDwG42x5BJI3s9mxu5rEjDnfbSnk20HQ9/ylTAYnSwYwxMVb+Vgu34wzzTQ7ogqBybebgQNUDAvZVQ38DbA==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.63.5.tgz", + "integrity": "sha512-C5CmDPQBtvjVo8cgQsBs+w6WB0JLkiixhgi6hVLV11hERWdn/p0XcPU2OUcZzac9BPOFq7SbaHFa8r3SWEysCQ==", "cpu": [ "riscv64" ], @@ -6954,9 +6958,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.63.3.tgz", - "integrity": "sha512-BQhejF6ZXOpxbngiNTP12GCGQeaDVL2QXGeBVViKIYzFHM5RKxTxwUMB1fr1BeNFphFMpnRqC5QSXFSa4z6UQw==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.63.5.tgz", + "integrity": "sha512-lHVQHJFKsuuxLMi3MQO9XVL8Tje3JR82CzB+QDKC5NWBcsIWuwsn9uIM5e3lBhI+fF1/s63qnyYqsg65+8rV/w==", "cpu": [ "s390x" ], @@ -6971,9 +6975,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.63.3.tgz", - "integrity": "sha512-SXagRwnI2Wlwlitllu59UK/nGVbD1CKPcNqDplHwIC4BqJcpXFjD32d1R/RbuISa95HdQrZM3/7v4bKiowFaLA==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.63.5.tgz", + "integrity": "sha512-3W9bTFcQNJn71cSJVM9RKIiZOy8DO/XLDii8Uv/Pm6WKqDRj7JV3ZfuXIEfyuy5LXpIzAbB/1M4Ukp9GKNa7nA==", "cpu": [ "x64" ], @@ -6988,9 +6992,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.63.3.tgz", - "integrity": "sha512-2IPozoEALRCziGqE8O9KMK60PMu5TS1huv4fwoeCexj+WjmcwFtX9CTOVbfXCUqcELAubEwRFPYlzb/WvwY2HQ==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.63.5.tgz", + "integrity": "sha512-VDC7rRJlee/scpki96GZ27Omf6yU87s1YXwVTpjE5841faVlDYYT565rgfmoR1U0sqL7z5ivQSDjcsF6VRXyBA==", "cpu": [ "x64" ], @@ -7005,9 +7009,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.63.3.tgz", - "integrity": "sha512-AoxqosUHT9IX54hFn2TiN6A7d6ZKTtE6pd2bqWtqkkNJ6HJGaU6FRouGX8L1O7R/ZwsnCnpQrHzb4pDEx+UHRQ==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.63.5.tgz", + "integrity": "sha512-z86Ok2p4pTdv5xqCKZsTooO7yBEiaJR/HzU3Wx8RmWsPoLppnMKROhJusQob8B3IE1ghC343kUW9rC2r+Wf3ig==", "cpu": [ "x64" ], @@ -7019,9 +7023,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.63.3.tgz", - "integrity": "sha512-d+CaftKgmkFBzCwezMqqy1d0QNNYugqLCMcYVQWBy5SS2YfeMP8Q8ripkgx9O8IyBXXLHrJ+aaCV4U96usv6Yg==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.63.5.tgz", + "integrity": "sha512-IzQmj+xXwQFGhMAMKMQVXkMwMZN3TqkJgAE0nSsqvVwWWciP4AIPMmWRqOQ2GfX7TUDZr+xqGFcBS36CRPGw0g==", "cpu": [ "arm64" ], @@ -7033,9 +7037,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.63.3.tgz", - "integrity": "sha512-xXlDF6nR1eOuXbdDy5Hl5fmtY7teUDevF/k0O7IPoZe4Tpmdv+lgdE5JRsnhQtt37ql9P0VF2kAN9a0OCZdo+Q==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.63.5.tgz", + "integrity": "sha512-F6qpTaPc9bwBH85kjy0/BLmLSW1uv7AoOXCoRIkg2arlgCYlWYcAbiMkvZuAcaWk9TpCRG//okznLAqLGshkMw==", "cpu": [ "arm64" ], @@ -7047,9 +7051,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.63.3.tgz", - "integrity": "sha512-YtXAgLN+JP7Ay6qG3eWhc7IHMQPzLc8r3uvhAvlJIoCz/4Q32+Bl9Fmnywidh8v1GOIMmymjovfqY9ETAtysvA==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.63.5.tgz", + "integrity": "sha512-igoDsTFhhwECBeGbUuLeIk7t8Y1apa+cs6mDWpx2EZ0ch7oEQgzHbFUXN9euoHekCAQzXdXApAGkV6jznS7tWw==", "cpu": [ "ia32" ], @@ -7061,9 +7065,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.63.3.tgz", - "integrity": "sha512-WuWtSJRNo549vzcfZyEgfqb6zeSgn1F+UE5kQ+BCjzz0W4MGCjntUHkZVc1VRuAM7+ULaSyhiPxD1spyewFvkQ==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.63.5.tgz", + "integrity": "sha512-U3teMeMbXFmaM5D+OTJpsOXd+wV/qftIeYF9kBKL4v73641qyJmoXFtA28DQLsnmlyayEsTe72xpLHrArq6vHw==", "cpu": [ "x64" ], @@ -7075,9 +7079,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.63.3.tgz", - "integrity": "sha512-+lIKX7O0+IGe7WuhATaAMMeT7B76vfhXH/l9wLQL+nvyhbw2ohYCKIdWL56JfDu75CWt5oKRP4QFH/jkMtBquA==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.63.5.tgz", + "integrity": "sha512-ypfC34F3RKXvCXBglGqGMsUSMKlgwd1HX9AOAlx9RoZZ6GaI42YHVeKpzg3JG+wpBUJYTG+NNZhqbDWL8tBZkw==", "cpu": [ "x64" ], @@ -7089,9 +7093,9 @@ ] }, "node_modules/@rollup/wasm-node": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.63.3.tgz", - "integrity": "sha512-2oxd3PqJgukB5Gi2ETYI27FuIf9iKNfn6cSuyzRCDurIp37nuee36+sgkTNHXIREkOT8YAdBAdY91GUXkuex5Q==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.63.5.tgz", + "integrity": "sha512-RRgnG3u8+hOCkgvgXDZDR1Vfg8IerYgltlJYWeKSuv2npISR+ED1E7qcq8+PyzftjdVCufsmgbg2idwmhvs/4w==", "dev": true, "license": "MIT", "dependencies": { @@ -7110,9 +7114,9 @@ } }, "node_modules/@rushstack/node-core-library": { - "version": "5.24.1", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.24.1.tgz", - "integrity": "sha512-ZlOrzv92MwnsCXA45qWfDj4L/kTasKghXezu+M2WmdtkbnXyPnZSCovfeBZx1Yc5qm+LkElbLw6IeSSWZDhZUg==", + "version": "5.24.2", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.24.2.tgz", + "integrity": "sha512-sgSqy/lqce+uMrggF/wEIISIfpMX8pAXE5qSzGgDYFrWJkrsttrw/MzU4GFVNcbHSkPz5KbSh/A4/JSpDHoNQA==", "dev": true, "license": "MIT", "dependencies": { @@ -7181,13 +7185,13 @@ } }, "node_modules/@rushstack/terminal": { - "version": "0.24.4", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.24.4.tgz", - "integrity": "sha512-3fRBWK0IMY293lBx5ycgit1DTMUi+nhOjALHlrIad9hQsqzM9Ak+XdBI1gJ/tZPxW+LraeAc4SsmMdcOflBmAQ==", + "version": "0.24.5", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.24.5.tgz", + "integrity": "sha512-AkbHjc48S7g4HkFO2wKHVMuJiZs/KaRI/rjcSpEj7o6SXgRYZrpXDE10NFa8ov/bxm4F5x+A8iqxkAGfEUTuTA==", "dev": true, "license": "MIT", "dependencies": { - "@rushstack/node-core-library": "5.24.1", + "@rushstack/node-core-library": "5.24.2", "@rushstack/problem-matcher": "0.2.1", "supports-color": "~8.1.1" }, @@ -7204,13 +7208,13 @@ } }, "node_modules/@rushstack/ts-command-line": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-5.3.14.tgz", - "integrity": "sha512-lT2JKZk2dukBMp4GFOh4RaDfVzpZehGgQOGpzpSliUn317NgEmOOCXyd7/d0eU46HHsbRxizP83GAm39s0lAlg==", + "version": "5.3.15", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-5.3.15.tgz", + "integrity": "sha512-9oUS23ebDfbl8ED6CANdQ3qqBc/xhrQvzhQAv61oN391FvNRww6RzdUbo97NEXaMm7lNEQsTjdE3zqtgiMv/eQ==", "dev": true, "license": "MIT", "dependencies": { - "@rushstack/terminal": "0.24.4", + "@rushstack/terminal": "0.24.5", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" @@ -7641,13 +7645,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.13.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.6.tgz", - "integrity": "sha512-SGrw/h3KPFshy3OE6ZL53LMBG5vGQQ8/gIpiqz/kRZhPJ7HgwCEs8LBuNtWLa8dvGZVpSF7+Bf+c11HUrCb/yg==", + "version": "24.19.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.19.0.tgz", + "integrity": "sha512-zY+5tKxXdhGh1PYI0ac+7juvEu4OI6vWtVVoj5i2m42jxAY1U+zHGt6QCyOFwykdP62sM3MJ9stoYYUw5aCWew==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.18.0" + "undici-types": ">=7.24.0 <7.24.7" } }, "node_modules/@types/qs": { @@ -7746,17 +7750,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.70.0.tgz", - "integrity": "sha512-/v8HZt6RlyIZxB3ntehELOcUcfxKPVGWXnQdJuHRmzrqgF8nQypcC/oxGW+Ot4VGKDq81XugPKxx0n5PBtf9PA==", + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.70.1.tgz", + "integrity": "sha512-nDNrUQ/4ruSNYbu749TRY7cfrzPtoLHEXSNBI8aaNY32LlZCajixqRf3FqcKC4p5Cam4VOHYx/t+i5+nKXvrqA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.70.0", - "@typescript-eslint/type-utils": "8.70.0", - "@typescript-eslint/utils": "8.70.0", - "@typescript-eslint/visitor-keys": "8.70.0", + "@typescript-eslint/scope-manager": "8.70.1", + "@typescript-eslint/type-utils": "8.70.1", + "@typescript-eslint/utils": "8.70.1", + "@typescript-eslint/visitor-keys": "8.70.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -7769,22 +7773,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.70.0", + "@typescript-eslint/parser": "^8.70.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.70.0.tgz", - "integrity": "sha512-zYvrmj9Yxd63UGaXw+kdt6A0F0s0qveJyuatIM77bYC2DE4pgmg7a50u8LR7PRtXd0x+h+Tl3eXabGm06SWd3Q==", + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.70.1.tgz", + "integrity": "sha512-nO974WLllwhSFWQXnMLj6nDGa8f0khKEz1JzpPJ1u7Vm/4X1X6ZHajpoknU4bb41vJyMB0HHVyS2GqdhWfIXZw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.70.0", - "@typescript-eslint/types": "8.70.0", - "@typescript-eslint/typescript-estree": "8.70.0", - "@typescript-eslint/visitor-keys": "8.70.0", + "@typescript-eslint/scope-manager": "8.70.1", + "@typescript-eslint/types": "8.70.1", + "@typescript-eslint/typescript-estree": "8.70.1", + "@typescript-eslint/visitor-keys": "8.70.1", "debug": "^4.4.3" }, "engines": { @@ -7800,14 +7804,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.70.0.tgz", - "integrity": "sha512-hFHbTNqhU9G+2eKFXCBVb1tjFT/LceiJ4+HfLO4pTpDI0KHi6iajpcFFkaSQ9gXmCh7n82A0PthaayEdN6mspQ==", + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.70.1.tgz", + "integrity": "sha512-62xOgboPfwc3/IgPSX/W6oQR3ZbF04194FPGUGH8HL8iLFHbt/456/8Ph1wLNUgVF+s94FlHoipBsz+v7+LMnA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.70.0", - "@typescript-eslint/types": "^8.70.0", + "@typescript-eslint/tsconfig-utils": "^8.70.1", + "@typescript-eslint/types": "^8.70.1", "debug": "^4.4.3" }, "engines": { @@ -7822,14 +7826,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.70.0.tgz", - "integrity": "sha512-8nP3Kwh5hlgZ4FicGvmznAmJe8UL4sdU8tLukrPaMuQmDuk4Y8xYfzu/aYZW4xT2JCgc7H/TpDI5cGlxcWJSqQ==", + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.70.1.tgz", + "integrity": "sha512-Pa0EeSeAusQc1WbjQMac+YfenewYTBu0KjgYvkUKwhXaHUKbFog23Dm/rp0DX/6tyYOQ3Xl1a+3EcFNZynGHCw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.70.0", - "@typescript-eslint/visitor-keys": "8.70.0" + "@typescript-eslint/types": "8.70.1", + "@typescript-eslint/visitor-keys": "8.70.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7840,9 +7844,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.70.0.tgz", - "integrity": "sha512-adnkeeNq9Sq1sUf4+FRVc0KdgYghzsgFpZSQVZVvY0LCuUuN0FnQgyGzCJeC4fW1cdXseBAjU2EOqUIjbNcZUw==", + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.70.1.tgz", + "integrity": "sha512-jumze1fPI+sDOaM2TWGQdn39PDxTr7TZGeuyLkAbNyx2vtMT3uRnVKChN0hfht5V2TugphJzF6bYXvBcE09qqg==", "dev": true, "license": "MIT", "engines": { @@ -7857,15 +7861,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.70.0.tgz", - "integrity": "sha512-NUMKIhYVaVIVLnRL9CRt+VVcuLgSHUCpXn4/+K8wql+vdInUzvx8BjUO1oJ7cG9shjFJKtF8F8Hh2kCh3/KBVw==", + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.70.1.tgz", + "integrity": "sha512-7zKTnyvaVWqzLZHPFQtX1hVHqgkMC+WebPWakNCSyrQVbIP1AM0L0TlBZtACldIRb6PptI8Odk+jyZ5kP3B1VA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.70.0", - "@typescript-eslint/typescript-estree": "8.70.0", - "@typescript-eslint/utils": "8.70.0", + "@typescript-eslint/types": "8.70.1", + "@typescript-eslint/typescript-estree": "8.70.1", + "@typescript-eslint/utils": "8.70.1", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -7882,9 +7886,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.70.0.tgz", - "integrity": "sha512-asTOIYhDg4zdzOScCyaytrsV3cR6B4ecPQlXw/dJIm7J/MZTtCtfVII9JD8Geh4jTCrK/Xe6cg5UevoleMcoJQ==", + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.70.1.tgz", + "integrity": "sha512-Dm1ypdhhrGCTyyehxElhgJ6kgk8MVCv5qXdoOVqPr1uqk42jX8KjrZqhROvdShczA8qrDoYiOWn1ykWlx2k81Q==", "dev": true, "license": "MIT", "engines": { @@ -7896,16 +7900,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.70.0.tgz", - "integrity": "sha512-d9NmHMPEKQ7QCLLm1jI3zmoQBwT5KwFYjXBJ9ymZfKCUU+5rmTRykKAFvH5Qn/ZCds3CEAFS9OC9M/jkl0X2bA==", + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.70.1.tgz", + "integrity": "sha512-TU8PwyGN0PQJUcE96mw8eCQ44SmxGdQlJmlWakHaHQ15eIuuvye5yNtmh/i6oS88jzXVQB71xdNkbkB/fMwL0g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.70.0", - "@typescript-eslint/tsconfig-utils": "8.70.0", - "@typescript-eslint/types": "8.70.0", - "@typescript-eslint/visitor-keys": "8.70.0", + "@typescript-eslint/project-service": "8.70.1", + "@typescript-eslint/tsconfig-utils": "8.70.1", + "@typescript-eslint/types": "8.70.1", + "@typescript-eslint/visitor-keys": "8.70.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -7924,16 +7928,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.70.0.tgz", - "integrity": "sha512-oZmtKJz/4fufZ2p3+Cn3ijEojcdfR+1zYDH2xKYrEly0dR/Q/1xUPRCOlKGxod78nWlU2UnDe09GZ3TaknBFGA==", + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.70.1.tgz", + "integrity": "sha512-Esgul8MsnKnRLdYU2Eb2cRV9bS5HJYtKj1ByJnOzzG2M58DGdSUQ1jUuILxipqcpB2h9WLrbD5GijIWUjX/Tqw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.70.0", - "@typescript-eslint/types": "8.70.0", - "@typescript-eslint/typescript-estree": "8.70.0" + "@typescript-eslint/scope-manager": "8.70.1", + "@typescript-eslint/types": "8.70.1", + "@typescript-eslint/typescript-estree": "8.70.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7948,13 +7952,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.70.0.tgz", - "integrity": "sha512-BoC8PiO4Hkdo0TVJh9Ntxr5MxPDI7/oFsrygN5ADelFSeXG/qgNuucIGA+L5Z6JpPTE/uRfcTWtscjbUaufepQ==", + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.70.1.tgz", + "integrity": "sha512-Vwj9lUIW5Xq3wQ9w6gv3R86g1hMK8f2zNOdGTAgeXUMMXFK78G9ruCjjqutHMNJc0+CH7LYRnHeUB9IT8wFmcw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.70.0", + "@typescript-eslint/types": "8.70.1", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -9009,9 +9013,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.11.25", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.25.tgz", - "integrity": "sha512-gMmEShwwq7FJqMwvfRwvCl00v4kN+KOfJqXn+f4nrufak5gNHJOksd/60Dvjuz7sI8Y5WiSFBa8FEYr+zoyqCw==", + "version": "2.11.26", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.26.tgz", + "integrity": "sha512-GLQdD3y6UF8iVuMJl5fHgE4jdn/ua7n+toKfLgNlg3BqQtOZjpy68T8Tup8/wGWZCDlm7KMg7tPb4MPn7oN0TQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -9196,9 +9200,9 @@ } }, "node_modules/browserslist": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.0.tgz", - "integrity": "sha512-3GSvyjvDI4Dur1Meg2BekJquu5uF+9R9a1+5M1Mde192eZoXbeXjzgOsgqPS2V8D5wrrip0gR5Hf/GhWQ9ZzaA==", + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.1.tgz", + "integrity": "sha512-AUdjuRyCNGUYtqpqfTmWyM4fXay8yIQhmLnvYe/THMGfT9B/34X7xQd3ifKxwyNPPpowVBjLb+64BN9Rn1mizw==", "dev": true, "funding": [ { @@ -9216,10 +9220,10 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.11.23", + "baseline-browser-mapping": "^2.11.25", "caniuse-lite": "^1.0.30001810", - "electron-to-chromium": "^1.5.427", - "node-releases": "^2.0.55", + "electron-to-chromium": "^1.5.438", + "node-releases": "^2.0.57", "update-browserslist-db": "^1.3.3" }, "bin": { @@ -9262,9 +9266,9 @@ "license": "MIT" }, "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.1.tgz", + "integrity": "sha512-DdH81/zPLVS11EUgWq3tEu/xn+EzljlMYooDNdzWEnFha3R3NBMpMV1UqYIpjYHV/SgpFKMIX1Oh7o06SjM/oA==", "dev": true, "license": "MIT", "dependencies": { @@ -9385,9 +9389,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001810", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", - "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", + "version": "1.0.30001812", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001812.tgz", + "integrity": "sha512-qN+QNNBr93TCmFrmte0bBCjSDMuRvt78VlHT99qIGPszm4QsqCX8lnyWUFkHi8B7ZBAPq8SH+UqyXNy/odMdng==", "dev": true, "funding": [ { @@ -9535,9 +9539,9 @@ } }, "node_modules/cli-truncate/node_modules/string-width": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", - "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz", + "integrity": "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10371,9 +10375,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.433", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.433.tgz", - "integrity": "sha512-5lCAbyZBjtmUt/RAGHRqrL2q0oEFRThDAsZHHDn9XHa89Qw7gMYOeSicBTy+AHfvo0r6vwsZvqNJTQIQy1BLzA==", + "version": "1.5.439", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.439.tgz", + "integrity": "sha512-qu6QIPXhsb+CRcAiTMNjR4A1y/7tCYKkKjr5CZXRVih6qkDf79peZ2BpEU3qoDBNCRrcy3Mra3X9nG5oruuA7Q==", "dev": true, "license": "ISC" }, @@ -12028,9 +12032,9 @@ } }, "node_modules/hono": { - "version": "4.13.8", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.8.tgz", - "integrity": "sha512-/Gng7NfoykZl2pjukW5Z6+8Yxm3BPRf86GTbQnt0SbySkvax4fyL4H3HhY1cCpBGmiW9XDRFzRV+CXK2W8QudQ==", + "version": "4.13.9", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.9.tgz", + "integrity": "sha512-7dMkQmZoC4E6F7AtaQSPhlWAdnBti+j7rreMZl8QB4jFiEhP9TWbGWUMi8WYzBCgmgulxuvLQupKqo+Co6Omyg==", "dev": true, "license": "MIT", "engines": { @@ -13473,14 +13477,14 @@ } }, "node_modules/magic-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.0.0.tgz", - "integrity": "sha512-CGvjzMN08iv6w1mm4/x3Gh1hLb4VnyRUA15FFpl6CsCIGGoe36k7kY5KNz9QDbSBN5I/fWHM6ZlIkUTa5xdUEA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.4.1.tgz", + "integrity": "sha512-8lyCu36ErXR0J9uaGKlKQoiLZKmtI63YGLE8G2o9jyRPdr4X47LusSOwgOJOzcVtp81fTAAjxR7BwKz682Jhow==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" + "@jridgewell/sourcemap-codec": "^1.6.0" } }, "node_modules/make-dir": { @@ -13574,20 +13578,20 @@ } }, "node_modules/memfs": { - "version": "4.78.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.78.1.tgz", - "integrity": "sha512-SkSlK6DZbzekBoiu0mcHUx9RRPnsBdaKQ36u8F3HvYZm/lRiD34YabQ2Xr76r+zYENzRPFKBsanAZPSl+r3Nqg==", + "version": "4.79.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.79.0.tgz", + "integrity": "sha512-vDFqA9WSa//xa3XIKwMmVqxgWWft4PMKW0k69gBM2rYOzZ3VqL9BrK3Kyl45jSxS7qImDgwejZzEb/xDWhP37g==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.78.1", - "@jsonjoy.com/fs-fsa": "4.78.1", - "@jsonjoy.com/fs-node": "4.78.1", - "@jsonjoy.com/fs-node-builtins": "4.78.1", - "@jsonjoy.com/fs-node-to-fsa": "4.78.1", - "@jsonjoy.com/fs-node-utils": "4.78.1", - "@jsonjoy.com/fs-print": "4.78.1", - "@jsonjoy.com/fs-snapshot": "4.78.1", + "@jsonjoy.com/fs-core": "4.79.0", + "@jsonjoy.com/fs-fsa": "4.79.0", + "@jsonjoy.com/fs-node": "4.79.0", + "@jsonjoy.com/fs-node-builtins": "4.79.0", + "@jsonjoy.com/fs-node-to-fsa": "4.79.0", + "@jsonjoy.com/fs-node-utils": "4.79.0", + "@jsonjoy.com/fs-print": "4.79.0", + "@jsonjoy.com/fs-snapshot": "4.79.0", "@jsonjoy.com/json-pack": "^1.11.0", "@jsonjoy.com/util": "^1.9.0", "glob-to-regex.js": "^1.3.1", @@ -14232,9 +14236,9 @@ } }, "node_modules/node-gyp/node_modules/undici": { - "version": "6.28.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.1.tgz", - "integrity": "sha512-zWpdTVD54H48CIybL0rWQ3ukpb9d23wM7eH5RtfdmeP70cWHNjtfo7P4vZX+5CoDcO53J4Pu5uXp7lNfjc6DRA==", + "version": "6.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.29.0.tgz", + "integrity": "sha512-R+RODBqp6i2pPflGdq+xIOUkl+RNfGgHwoinecKu/JCuf2uO06cOKoDbI2P7Dn6KcswdKwrczbU6IYJ6K8X+wg==", "dev": true, "license": "MIT", "engines": { @@ -14258,9 +14262,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.56", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.56.tgz", - "integrity": "sha512-x0InOIyzgdk+eyaWaRJFH5snEtiImgBgblZ2CyPrLmqqcuMQkEvcDPHbzqbD8eDsSeJbVOjn+crzyzHaM4D+/A==", + "version": "2.0.57", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.57.tgz", + "integrity": "sha512-kQK9LGGFiHtrWiNhZtA7Qbw17AQz+dmsEKODRIVTXA9+e5MS/2gZEBhYJt13GrAz5/IOZKddH/0Z3TP/Zgo+yw==", "dev": true, "license": "MIT", "engines": { @@ -14619,9 +14623,9 @@ } }, "node_modules/ora/node_modules/string-width": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", - "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz", + "integrity": "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14636,9 +14640,9 @@ } }, "node_modules/ordered-binary": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.1.tgz", - "integrity": "sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.2.tgz", + "integrity": "sha512-BY+qgDArmYpvvmij141xbkB4Cw8RFLBQM5Zj4MODFb1SyXBRE/xO4Xj/QWbR7aUEBxbkjuNdsFVCL2TmbYrlNg==", "dev": true, "license": "MIT", "optional": true @@ -15049,13 +15053,16 @@ } }, "node_modules/pkijs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.4.0.tgz", - "integrity": "sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.4.1.tgz", + "integrity": "sha512-Oo/NZcSWccq8KyoG7gLE9fnltgHns+pNCjCAp/WmjsUySi+sX7y4z4Xqu4fVb42CDHzRPl33fjzT15V1wvcyhA==", "dev": true, "license": "BSD-3-Clause", + "workspaces": [ + "website" + ], "dependencies": { - "@noble/hashes": "1.4.0", + "@noble/hashes": "1.8.0", "asn1js": "^3.0.6", "bytestreamjs": "^2.0.1", "pvtsutils": "^1.3.6", @@ -15337,9 +15344,9 @@ } }, "node_modules/prettier": { - "version": "3.9.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.8.tgz", - "integrity": "sha512-WRFq3Wn3WId7LLROfMLdH7xaFr2jR62wU8nLO6rQUOLOxNZUviyJQs1M0iIhLexSFy+L+w0ch66wtoO2jRjG0A==", + "version": "3.9.9", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.9.tgz", + "integrity": "sha512-Z/CJHIkdujO/OtN7nXUii0Rf3VT5SRuhjBA82Xvu2XhBUgX3nhP67T0LHceBdQLex7OOFGTox+Q5Yg8Jk2Qivg==", "dev": true, "license": "MIT", "bin": { @@ -15950,9 +15957,9 @@ } }, "node_modules/rollup": { - "version": "4.63.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.63.3.tgz", - "integrity": "sha512-1i2XreiAoMMXuPGD6Msj2xWrMMkHojNRKivInxGQcg7/1KuPuYlfUutLyh4drnOxUTHX9cHI4wFoat8D/NKaBw==", + "version": "4.63.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.63.5.tgz", + "integrity": "sha512-KRWwmNLlPw5M7HcdYfm15oBv9n9LPtjzpzCIxS/phwqvPyxHSoKX6Y2YU3pxSPfy0CLquVgsx/j/hBi6OvH1Nw==", "dev": true, "license": "MIT", "dependencies": { @@ -15967,31 +15974,31 @@ }, "optionalDependencies": { "@napi-rs/lzma-linux-x64-gnu": "1.5.1", - "@rollup/rollup-android-arm-eabi": "4.63.3", - "@rollup/rollup-android-arm64": "4.63.3", - "@rollup/rollup-darwin-arm64": "4.63.3", - "@rollup/rollup-darwin-x64": "4.63.3", - "@rollup/rollup-freebsd-arm64": "4.63.3", - "@rollup/rollup-freebsd-x64": "4.63.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.63.3", - "@rollup/rollup-linux-arm-musleabihf": "4.63.3", - "@rollup/rollup-linux-arm64-gnu": "4.63.3", - "@rollup/rollup-linux-arm64-musl": "4.63.3", - "@rollup/rollup-linux-loong64-gnu": "4.63.3", - "@rollup/rollup-linux-loong64-musl": "4.63.3", - "@rollup/rollup-linux-ppc64-gnu": "4.63.3", - "@rollup/rollup-linux-ppc64-musl": "4.63.3", - "@rollup/rollup-linux-riscv64-gnu": "4.63.3", - "@rollup/rollup-linux-riscv64-musl": "4.63.3", - "@rollup/rollup-linux-s390x-gnu": "4.63.3", - "@rollup/rollup-linux-x64-gnu": "4.63.3", - "@rollup/rollup-linux-x64-musl": "4.63.3", - "@rollup/rollup-openbsd-x64": "4.63.3", - "@rollup/rollup-openharmony-arm64": "4.63.3", - "@rollup/rollup-win32-arm64-msvc": "4.63.3", - "@rollup/rollup-win32-ia32-msvc": "4.63.3", - "@rollup/rollup-win32-x64-gnu": "4.63.3", - "@rollup/rollup-win32-x64-msvc": "4.63.3", + "@rollup/rollup-android-arm-eabi": "4.63.5", + "@rollup/rollup-android-arm64": "4.63.5", + "@rollup/rollup-darwin-arm64": "4.63.5", + "@rollup/rollup-darwin-x64": "4.63.5", + "@rollup/rollup-freebsd-arm64": "4.63.5", + "@rollup/rollup-freebsd-x64": "4.63.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.63.5", + "@rollup/rollup-linux-arm-musleabihf": "4.63.5", + "@rollup/rollup-linux-arm64-gnu": "4.63.5", + "@rollup/rollup-linux-arm64-musl": "4.63.5", + "@rollup/rollup-linux-loong64-gnu": "4.63.5", + "@rollup/rollup-linux-loong64-musl": "4.63.5", + "@rollup/rollup-linux-ppc64-gnu": "4.63.5", + "@rollup/rollup-linux-ppc64-musl": "4.63.5", + "@rollup/rollup-linux-riscv64-gnu": "4.63.5", + "@rollup/rollup-linux-riscv64-musl": "4.63.5", + "@rollup/rollup-linux-s390x-gnu": "4.63.5", + "@rollup/rollup-linux-x64-gnu": "4.63.5", + "@rollup/rollup-linux-x64-musl": "4.63.5", + "@rollup/rollup-openbsd-x64": "4.63.5", + "@rollup/rollup-openharmony-arm64": "4.63.5", + "@rollup/rollup-win32-arm64-msvc": "4.63.5", + "@rollup/rollup-win32-ia32-msvc": "4.63.5", + "@rollup/rollup-win32-x64-gnu": "4.63.5", + "@rollup/rollup-win32-x64-msvc": "4.63.5", "fsevents": "~2.3.2" } }, @@ -16330,9 +16337,9 @@ } }, "node_modules/serialize-javascript": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.1.1.tgz", - "integrity": "sha512-k3CMsaIvvdSwm8oLB4MXSl0wH2/cwlH7xGcnRd2DaeRmBkbzYmyT8j0tsX60DwD1eRwHTpNpH8ljKu9oUT1MeQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.1.2.tgz", + "integrity": "sha512-GL2BWwVa6JydKO6l/ljVgjAZF4QJ3S7dWDWi53s5GZT8PJzD2fNxi67HANQGKAqPrwEpL5ba7gUBGi0Ls/sEoQ==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -17223,9 +17230,9 @@ } }, "node_modules/stylelint/node_modules/ignore": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.9.tgz", - "integrity": "sha512-brTTsvFRt5C1gGHtPst/281UjPD5t9fBqbgoMPlVWy11ZLTPfu7HxK4ZYqO9H7o/yC9rSTCI85EaQ4OoY12qYw==", + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.10.tgz", + "integrity": "sha512-HpbUakT7xp5miBUywCHf36ZEuAJNklBJDDsGpUIjMzOSmM8ELSfA9Sa/QDPeNeqeoN31u+UTCkL4klCOVvRm4Q==", "dev": true, "license": "MIT", "engines": { @@ -17240,9 +17247,9 @@ "license": "ISC" }, "node_modules/stylelint/node_modules/string-width": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", - "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz", + "integrity": "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17871,16 +17878,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.70.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.70.0.tgz", - "integrity": "sha512-P/W5cz70/cQAuKfY3xwQMWWTV7BvJ0mAQmi+9mBcsVPaBUpd6Ohpa+fECv9rBFrQcig86jAiNBFNWUqnTjr4pw==", + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.70.1.tgz", + "integrity": "sha512-AcWG7KDjZ2THNXsgwttMaGmzVi0VFRlFYfqFHYQRbDpF3owuYbuiL8c7UUrd2k8s3PoSfIQrWfrGXfcElrWLYA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.70.0", - "@typescript-eslint/parser": "8.70.0", - "@typescript-eslint/typescript-estree": "8.70.0", - "@typescript-eslint/utils": "8.70.0" + "@typescript-eslint/eslint-plugin": "8.70.1", + "@typescript-eslint/parser": "8.70.1", + "@typescript-eslint/typescript-estree": "8.70.1", + "@typescript-eslint/utils": "8.70.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -17951,9 +17958,9 @@ } }, "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", + "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", "dev": true, "license": "MIT" }, @@ -18002,9 +18009,9 @@ } }, "node_modules/unicorn-magic": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", - "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.1.tgz", + "integrity": "sha512-lzlXPoVB0Uy/FvTaUgX39RbixYiSKoc3JSoSf01+0c2B6FR3qdYIPN7Qjo/AV7n6sqLCk0509cT3LRj1oSZ1+A==", "dev": true, "license": "MIT", "engines": { @@ -19058,9 +19065,9 @@ } }, "node_modules/webpack-sources": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.5.1.tgz", - "integrity": "sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.6.0.tgz", + "integrity": "sha512-EIMmPVvNI0CYXyRPp34F2Qk7W37/BZVZIofS6LAUnrNjCVahS+hO4mxwFJDjQjODTGZDtVzLYoN2+1dYkhk9qA==", "dev": true, "license": "MIT", "engines": { @@ -19277,9 +19284,9 @@ } }, "node_modules/ws": { - "version": "8.21.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", - "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.22.0.tgz", + "integrity": "sha512-Ydggc987+RO0AnWtZ/7Wq9FtNvcrL1b/RO0ud9mWjUPgDrsAAwQSF51sm2hm1XofbU/4jkpGEsLFsZZxU+1DOg==", "dev": true, "license": "MIT", "engines": { @@ -19333,9 +19340,9 @@ "license": "ISC" }, "node_modules/yargs": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.1.0.tgz", - "integrity": "sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.2.0.tgz", + "integrity": "sha512-9OpKOLeaoNFecEp7P6iYbzze/5CqWoH7N3SMs/6y1XF4nMvFMspEGZzJ6uFi9MmQwXhyzqYoSEKO3tvA3Z/o2w==", "dev": true, "license": "MIT", "dependencies": { @@ -19361,9 +19368,9 @@ } }, "node_modules/yargs/node_modules/string-width": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", - "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz", + "integrity": "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==", "dev": true, "license": "MIT", "dependencies": { From 01fe6ed7c1b71e63bf2429336b32fdb077febdb1 Mon Sep 17 00:00:00 2001 From: Paolo Argentieri Date: Tue, 29 Sep 2026 16:17:23 -0700 Subject: [PATCH 07/20] doc --- README.md | 38 +++---------------- package.json | 4 +- .../lf-documentation/src/app/router-links.ts | 2 +- .../framework-agnostic-ui-component-demo.html | 24 +++++++++--- 4 files changed, 28 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index 370a3f87..b8d70e7c 100644 --- a/README.md +++ b/README.md @@ -59,46 +59,20 @@ npm run create-types-lf-ui-components The command above will output: `./types-lf-ui-components-publish/laserfiche-types-lf-ui-components-[MajorVersion].0.0.tgz`. -### Build lf-documentation +### Build and view lf-documentation locally You can use the lf-documentation project for testing changes. -Build lf-documentation: +Build style sheets and lf-documentation: ```sh -cd repo-root-folder -npm run build-ui-components-prod -npm run build-lf-documentation-prod -``` - -to create `./dist/lf-documentation`. - -Build style sheets: - -```sh -npm run sass-lf -npm run sass-ms -``` - -### For interactive development: Build lf-documentation in watch mode +npm run build-lf-documentation-dev +# OR npm build-lf-documentation-dev-watch -This allows you to see changes you make to the ui components quickly. You can run the two commands in different windows so that you can see any changes in the browser, even those that are shared across components. - -```sh -cd repo-root-folder -npm run build-ui-components-dev-watch -npm run build-lf-documentation-dev-watch -``` - -to create `./dist/lf-documentation`. - -### View the interactive documentation - -```sh -npx ng serve lf-documentation --configuration development --host 127.0.0.1 --port 4200 +# Documentation output folder: ./dist/lf-documentation +npm run serve ``` -Or configure a web server to serve `.dist/lf-documentation/browser` (e.g. IIS on WIndows). ## Things to verify before creating a Pull Request diff --git a/package.json b/package.json index 5a99a595..f3b7aee0 100644 --- a/package.json +++ b/package.json @@ -10,8 +10,8 @@ "ng": "ng", "serve": "ng serve lf-documentation --configuration development --host 127.0.0.1 --port 4200", "build": "npm run build-ui-components-prod && npm run build-lf-documentation-prod && npm run build-lf-cdn-prod && npm run sass-lf && npm run sass-ms", - "build-lf-documentation-dev": "npm run sass-lf && npm run sass-ms && ng build lf-documentation --configuration development --delete-output-path false", - "build-lf-documentation-dev-watch": "npm run sass-lf && npm run sass-ms && ng build lf-documentation --configuration development --delete-output-path false --watch", + "build-lf-documentation-dev": "npm run sass-lf && npm run sass-ms && npm run build-ui-components-dev && ng build lf-documentation --configuration development --delete-output-path false", + "build-lf-documentation-dev-watch": "npm run sass-lf && npm run sass-ms && npm run build-ui-components-dev && ng build lf-documentation --configuration development --delete-output-path false --watch", "build-lf-documentation-prod": "npm run sass-lf && npm run sass-ms && ng build lf-documentation --configuration production --output-hashing=none", "build-lf-cdn-prod": "ng build lf-cdn --configuration production --output-hashing=none", "build-lf-cdn-dev": "ng build lf-cdn --configuration development --output-hashing=none", diff --git a/projects/lf-documentation/src/app/router-links.ts b/projects/lf-documentation/src/app/router-links.ts index e868044c..7fefeab9 100644 --- a/projects/lf-documentation/src/app/router-links.ts +++ b/projects/lf-documentation/src/app/router-links.ts @@ -4,7 +4,7 @@ export enum RouterLinks { OVERVIEW = 'overview', GETTING_STARTED = 'getting-started', - EXAMPLE_USAGE_HTML = 'using-ui-components-from-cdn-in-html5', + EXAMPLE_USAGE_HTML = 'using-ui-components-in-any-framework', EXAMPLE_NPM_USAGE_ANGULAR = 'using-ui-components-from-npm-package-in-angular', STYLING = 'styling', TROUBLESHOOTING = 'troubleshooting', diff --git a/projects/static-assets/framework-agnostic-ui-component-demo.html b/projects/static-assets/framework-agnostic-ui-component-demo.html index 355691fa..a59818f6 100644 --- a/projects/static-assets/framework-agnostic-ui-component-demo.html +++ b/projects/static-assets/framework-agnostic-ui-component-demo.html @@ -70,7 +70,7 @@

    lf-field-container

    lf-repository-browser

    Composite component; renders its own breadcrumbs and projects the toolbar you pass in.

    -
    +
    -
    +
    {{ cardTitle }} diff --git a/projects/lf-documentation/src/app/card/card.component.ts b/projects/lf-documentation/src/app/card/card.component.ts index fe5132dc..4cf60777 100644 --- a/projects/lf-documentation/src/app/card/card.component.ts +++ b/projects/lf-documentation/src/app/card/card.component.ts @@ -1,7 +1,7 @@ // Copyright (c) Laserfiche. // Licensed under the MIT License. See LICENSE in the project root for license information. -import { Component, Input } from '@angular/core'; +import { Component, Input, booleanAttribute } from '@angular/core'; import { MatCardModule } from '@angular/material/card'; @Component({ @@ -13,6 +13,8 @@ import { MatCardModule } from '@angular/material/card'; }) export class CardComponent { @Input() cardTitle: string | undefined; + /** Span the full column width and stretch the projected content to fill the card as it is resized. */ + @Input({ transform: booleanAttribute }) fill = false; constructor() {} } diff --git a/projects/lf-documentation/src/app/example-usage-in-html/example-usage-in-html.component.css b/projects/lf-documentation/src/app/example-usage-in-html/example-usage-in-html.component.css index 46be9750..a9562313 100644 --- a/projects/lf-documentation/src/app/example-usage-in-html/example-usage-in-html.component.css +++ b/projects/lf-documentation/src/app/example-usage-in-html/example-usage-in-html.component.css @@ -3,7 +3,10 @@ Licensed under the MIT License. See LICENSE in the project root for license info .demo-frame { display: block; + box-sizing: border-box; + flex: 1 1 auto; width: 100%; height: 400px; + min-height: 0; border: 1px solid #ccc; } diff --git a/projects/lf-documentation/src/app/example-usage-in-html/example-usage-in-html.component.html b/projects/lf-documentation/src/app/example-usage-in-html/example-usage-in-html.component.html index 3eec4600..96e54760 100644 --- a/projects/lf-documentation/src/app/example-usage-in-html/example-usage-in-html.component.html +++ b/projects/lf-documentation/src/app/example-usage-in-html/example-usage-in-html.component.html @@ -84,6 +84,11 @@

    Complete example — framework-agnostic-ui-component-demo.html:
    {{ demoFileContent() }}

    Live Demo — framework-agnostic-ui-component-demo.html

    - - + + diff --git a/projects/lf-documentation/src/app/example-usage-in-html/example-usage-in-html.component.ts b/projects/lf-documentation/src/app/example-usage-in-html/example-usage-in-html.component.ts index 013fd1fb..da673818 100644 --- a/projects/lf-documentation/src/app/example-usage-in-html/example-usage-in-html.component.ts +++ b/projects/lf-documentation/src/app/example-usage-in-html/example-usage-in-html.component.ts @@ -1,7 +1,7 @@ // Copyright (c) Laserfiche. // Licensed under the MIT License. See LICENSE in the project root for license information. -import { Component, OnInit, inject, signal } from '@angular/core'; +import { Component, DestroyRef, OnInit, inject, signal } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { ExampleUsageBasicStepsDirective } from '../example-usage-basic-steps.directive'; import { CardComponent } from '../card/card.component'; @@ -15,6 +15,7 @@ import { CardComponent } from '../card/card.component'; }) export class ExampleUsageInHtmlComponent extends ExampleUsageBasicStepsDirective implements OnInit { private http = inject(HttpClient); + private destroyRef = inject(DestroyRef); demoFileContent = signal(''); ngOnInit() { @@ -22,4 +23,19 @@ export class ExampleUsageInHtmlComponent extends ExampleUsageBasicStepsDirective this.demoFileContent.set(content); }); } + + /** Grows the demo iframe to its content height, so it opens without a scrollbar; the demo renders asynchronously. */ + onDemoFrameLoad(frame: HTMLIFrameElement) { + const frameWindow = frame.contentWindow as (Window & typeof globalThis) | null; + const frameRoot = frame.contentDocument?.documentElement; + if (!frameWindow || !frameRoot) { + return; + } + const observer = new frameWindow.ResizeObserver(() => { + const frameBorder = frame.offsetHeight - frame.clientHeight; + frame.style.height = `${Math.ceil(frameRoot.getBoundingClientRect().height) + frameBorder}px`; + }); + observer.observe(frameRoot); + this.destroyRef.onDestroy(() => observer.disconnect()); + } } diff --git a/vitest.config.js b/vitest.config.js index 2a32e919..1ac0cbfc 100644 --- a/vitest.config.js +++ b/vitest.config.js @@ -48,5 +48,15 @@ export default defineConfig({ ], }, reporters: ['default', ['junit', { outputFile: './test-results.xml' }]], + // Collected only when run with --coverage (npm run test:coverage). + coverage: { + provider: 'v8', + include: ['projects/ui-components/**/*.ts'], + exclude: ['**/*.spec.ts', '**/*public-api.ts', 'projects/ui-components/entry.ts'], + // json-summary and json feed the coverage report in the CI workflow; html is uploaded as an artifact. + reporter: ['text-summary', 'html', 'json-summary', 'json'], + reportsDirectory: './coverage', + reportOnFailure: true, + }, }, }); From acb5ce892421924765bbb9d200d6a22185ede6d7 Mon Sep 17 00:00:00 2001 From: Paolo Argentieri Date: Tue, 29 Sep 2026 17:10:38 -0700 Subject: [PATCH 10/20] Documentation --- .github/workflows/main.yml | 4 +--- .github/workflows/security-scan.yaml | 4 +--- README.md | 2 +- build-local-npm-package.ps1 | 3 +-- build-test-locally.ps1 | 4 ---- package.json | 10 +++++----- .../example-usage-in-html.component.html | 7 ++----- .../example-usage-in-html.component.spec.ts | 19 ++++--------------- .../example-usage-in-html.component.ts | 13 ++----------- 9 files changed, 17 insertions(+), 49 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bdefc8b2..002b516d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -54,9 +54,7 @@ jobs: - name: npm run create-types-lf-ui-components run: npm run create-types-lf-ui-components - - name: npm run create-lf-cdn - run: npm run create-lf-cdn - + # Also builds the CDN bundle (create-lf-cdn) that the documentation's live demo loads. - name: npm run build-lf-documentation-prod run: npm run build-lf-documentation-prod diff --git a/.github/workflows/security-scan.yaml b/.github/workflows/security-scan.yaml index 8a5469c1..4816a547 100644 --- a/.github/workflows/security-scan.yaml +++ b/.github/workflows/security-scan.yaml @@ -37,9 +37,7 @@ jobs: - name: npm run create-types-lf-ui-components run: npm run create-types-lf-ui-components - - name: npm run create-lf-cdn - run: npm run create-lf-cdn - + # Also builds the CDN bundle (create-lf-cdn) that the documentation's live demo loads. - name: npm run build-lf-documentation-dev run: npm run build-lf-documentation-dev diff --git a/README.md b/README.md index 0ffaf206..de9f058c 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ The command above will output: `./types-lf-ui-components-publish/laserfiche-type You can use the lf-documentation project for testing changes. -Build style sheets and lf-documentation: +Build style sheets and lf-documentation. These scripts, and `npm run serve`, also build the CDN bundle (`npm run create-lf-cdn`) that the framework-agnostic live demo loads; restart `npm run serve` to pick up a rebuilt bundle. ```sh npm run build-lf-documentation-dev diff --git a/build-local-npm-package.ps1 b/build-local-npm-package.ps1 index 5a4cd3b5..6852027f 100644 --- a/build-local-npm-package.ps1 +++ b/build-local-npm-package.ps1 @@ -1,8 +1,7 @@ $ErrorActionPreference = 'Stop' npm run build-ui-components-prod -npm run create-lf-cdn -npm run build-lf-documentation-prod +npm run build-lf-documentation-prod # also builds the CDN bundle (create-lf-cdn) New-Item -ItemType Directory -Force -Path dist/ui-components/cdn | Out-Null diff --git a/build-test-locally.ps1 b/build-test-locally.ps1 index 0a1b5d68..07acd6ff 100644 --- a/build-test-locally.ps1 +++ b/build-test-locally.ps1 @@ -33,10 +33,6 @@ $steps = @( Name = 'npm run format:write' Command = { npm run format:write } } - [PSCustomObject]@{ - Name = 'npm run create-lf-cdn' - Command = { npm run create-lf-cdn } - } [PSCustomObject]@{ Name = 'npm run sass-lf' Command = { npm run sass-lf } diff --git a/package.json b/package.json index 852c1323..6b78c90e 100644 --- a/package.json +++ b/package.json @@ -8,11 +8,11 @@ }, "scripts": { "ng": "ng", - "serve": "ng serve lf-documentation --configuration development --host 127.0.0.1 --port 4200", - "build": "npm run build-ui-components-prod && npm run build-lf-documentation-prod && npm run build-lf-cdn-prod && npm run sass-lf && npm run sass-ms", - "build-lf-documentation-dev": "npm run sass-lf && npm run sass-ms && npm run build-ui-components-dev && ng build lf-documentation --configuration development --delete-output-path false", - "build-lf-documentation-dev-watch": "npm run sass-lf && npm run sass-ms && npm run build-ui-components-dev && ng build lf-documentation --configuration development --delete-output-path false --watch", - "build-lf-documentation-prod": "npm run sass-lf && npm run sass-ms && ng build lf-documentation --configuration production --output-hashing=none", + "serve": "npm run create-lf-cdn && ng serve lf-documentation --configuration development --host 127.0.0.1 --port 4200", + "build": "npm run build-ui-components-prod && npm run build-lf-documentation-prod && npm run sass-lf && npm run sass-ms", + "build-lf-documentation-dev": "npm run sass-lf && npm run sass-ms && npm run build-ui-components-dev && npm run create-lf-cdn && ng build lf-documentation --configuration development --delete-output-path false", + "build-lf-documentation-dev-watch": "npm run sass-lf && npm run sass-ms && npm run build-ui-components-dev && npm run create-lf-cdn && ng build lf-documentation --configuration development --delete-output-path false --watch", + "build-lf-documentation-prod": "npm run sass-lf && npm run sass-ms && npm run create-lf-cdn && ng build lf-documentation --configuration production --output-hashing=none", "build-lf-cdn-prod": "ng build lf-cdn --configuration production --output-hashing=none", "build-lf-cdn-dev": "ng build lf-cdn --configuration development --output-hashing=none", "build-ui-components-prod": "ng build ui-components --configuration production", diff --git a/projects/lf-documentation/src/app/example-usage-in-html/example-usage-in-html.component.html b/projects/lf-documentation/src/app/example-usage-in-html/example-usage-in-html.component.html index 96e54760..a81cb983 100644 --- a/projects/lf-documentation/src/app/example-usage-in-html/example-usage-in-html.component.html +++ b/projects/lf-documentation/src/app/example-usage-in-html/example-usage-in-html.component.html @@ -31,7 +31,7 @@

    Which tags you can create

    Simplest example: lf-tags

    The steps below show how to use lf-tags, a leaf component, in a plain HTML file without any framework. A - complete working example and live demo are shown at the end. + live demo is shown at the end.

    1. @@ -80,10 +80,7 @@

      Simplest example: lf-tags

    -

    Complete example — framework-agnostic-ui-component-demo.html:

    -
    {{ demoFileContent() }}
    - -

    Live Demo — framework-agnostic-ui-component-demo.html

    +

    Live demo — framework-agnostic-ui-component-demo.html