diff --git a/change/@ni-spright-angular-31b29e46-9695-49c8-9525-c7e1fb7513ac.json b/change/@ni-spright-angular-31b29e46-9695-49c8-9525-c7e1fb7513ac.json new file mode 100644 index 0000000000..8055e27fde --- /dev/null +++ b/change/@ni-spright-angular-31b29e46-9695-49c8-9525-c7e1fb7513ac.json @@ -0,0 +1,7 @@ +{ + "type": "minor", + "comment": "Add dedicated chat message components for inbound, outbound, and system messages. The original chat message component is deprecated and will be removed in a future release.", + "packageName": "@ni/spright-angular", + "email": "jattasNI@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change/@ni-spright-blazor-879621d4-9813-47ca-9a37-46b18fbec175.json b/change/@ni-spright-blazor-879621d4-9813-47ca-9a37-46b18fbec175.json new file mode 100644 index 0000000000..9c00f4f560 --- /dev/null +++ b/change/@ni-spright-blazor-879621d4-9813-47ca-9a37-46b18fbec175.json @@ -0,0 +1,7 @@ +{ + "type": "minor", + "comment": "Add dedicated chat message components for inbound, outbound, and system messages. The original chat message component is deprecated and will be removed in a future release.", + "packageName": "@ni/spright-blazor", + "email": "jattasNI@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change/@ni-spright-components-0983404e-2334-4d3f-94cf-6e96e6d643a8.json b/change/@ni-spright-components-0983404e-2334-4d3f-94cf-6e96e6d643a8.json new file mode 100644 index 0000000000..d9510408dc --- /dev/null +++ b/change/@ni-spright-components-0983404e-2334-4d3f-94cf-6e96e6d643a8.json @@ -0,0 +1,7 @@ +{ + "type": "minor", + "comment": "Add dedicated chat message components for inbound, outbound, and system messages. The original chat message component is deprecated and will be removed in a future release.", + "packageName": "@ni/spright-components", + "email": "jattasNI@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change/@ni-spright-react-d00d1016-6e7f-4584-bd00-1209e4781ffa.json b/change/@ni-spright-react-d00d1016-6e7f-4584-bd00-1209e4781ffa.json new file mode 100644 index 0000000000..f5efda3dba --- /dev/null +++ b/change/@ni-spright-react-d00d1016-6e7f-4584-bd00-1209e4781ffa.json @@ -0,0 +1,7 @@ +{ + "type": "minor", + "comment": "Add dedicated chat message components for inbound, outbound, and system messages. The original chat message component is deprecated and will be removed in a future release.", + "packageName": "@ni/spright-react", + "email": "jattasNI@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/package-lock.json b/package-lock.json index a084a30c94..51df80c783 100644 --- a/package-lock.json +++ b/package-lock.json @@ -230,6 +230,7 @@ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12.0.0" }, @@ -253,6 +254,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } @@ -298,7 +300,6 @@ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -335,6 +336,7 @@ "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", @@ -424,6 +426,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -543,6 +546,7 @@ "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-19.8.1.tgz", "integrity": "sha512-NOMkw0xgDoDVCLkL5nkkvdd3ouDYkOGqtEmabTR7N4/kQnk1R4coOTWGCqAgMXCFdxlyjuxquDwuJ+yni81pRg==", "license": "MIT", + "peer": true, "dependencies": { "@angular-devkit/architect": ">= 0.1900.0 < 0.2000.0", "@angular-devkit/core": ">= 19.0.0 < 20.0.0" @@ -556,13 +560,15 @@ "version": "19.8.1", "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-19.8.1.tgz", "integrity": "sha512-WXi1YbSs7SIQo48u+fCcc5Nt14/T4QzYQPLZUnjtsUXPgQG7ZoahhcGf7PPQ+n0V3pSopHOlSHwqK+tSsYK87A==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@angular-eslint/eslint-plugin": { "version": "19.8.1", "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-19.8.1.tgz", "integrity": "sha512-wZEBMPwD2TRhifG751hcj137EMIEaFmsxRB2EI+vfINCgPnFGSGGOHXqi8aInn9fXqHs7VbXkAzXYdBsvy1m4Q==", "license": "MIT", + "peer": true, "dependencies": { "@angular-eslint/bundled-angular-compiler": "19.8.1", "@angular-eslint/utils": "19.8.1" @@ -578,6 +584,7 @@ "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-19.8.1.tgz", "integrity": "sha512-0ZVQldndLrDfB0tzFe/uIwvkUcakw8qGxvkEU0l7kSbv/ngNQ/qrkRi7P64otB15inIDUNZI2jtmVat52dqSfQ==", "license": "MIT", + "peer": true, "dependencies": { "@angular-eslint/bundled-angular-compiler": "19.8.1", "@angular-eslint/utils": "19.8.1", @@ -597,6 +604,7 @@ "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-19.8.1.tgz", "integrity": "sha512-MKzfO3puOCuQFgP8XDUkEr5eaqcCQLAdYLLMcywEO/iRs1eRHL46+rkW+SjDp1cUqlxKtu+rLiTYr0T/O4fi9Q==", "license": "MIT", + "peer": true, "dependencies": { "@angular-devkit/core": ">= 19.0.0 < 20.0.0", "@angular-devkit/schematics": ">= 19.0.0 < 20.0.0", @@ -612,6 +620,7 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "license": "MIT", + "peer": true, "engines": { "node": ">= 4" } @@ -621,6 +630,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", + "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -648,6 +658,7 @@ "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-19.8.1.tgz", "integrity": "sha512-gVDKYWmAjeTPtaYmddT/HS03fCebXJtrk8G1MouQIviZbHqLjap6TbVlzlkBigRzaF0WnFnrDduQslkJzEdceA==", "license": "MIT", + "peer": true, "dependencies": { "@angular-eslint/bundled-angular-compiler": "19.8.1" }, @@ -662,7 +673,6 @@ "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-19.2.18.tgz", "integrity": "sha512-c76x1t+OiSstPsvJdHmV8Q4taF+8SxWKqiY750fOjpd01it4jJbU6YQqIroC6Xie7154zZIxOTHH2uTj+nm5qA==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1057,7 +1067,6 @@ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -1123,7 +1132,6 @@ "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", @@ -1564,7 +1572,6 @@ "resolved": "https://registry.npmjs.org/@angular/common/-/common-19.2.18.tgz", "integrity": "sha512-CrV02Omzw/QtfjlEVXVPJVXipdx83NuA+qSASZYrxrhKFusUZyK3P/Zznqg+wiAeNDbedQwMUVqoAARHf0xQrw==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1581,7 +1588,6 @@ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-19.2.18.tgz", "integrity": "sha512-3MscvODxRVxc3Cs0ZlHI5Pk5rEvE80otfvxZTMksOZuPlv1B+S8MjWfc3X3jk9SbyUEzODBEH55iCaBHD48V3g==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1594,7 +1600,6 @@ "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-19.2.18.tgz", "integrity": "sha512-N4TMtLfImJIoMaRL6mx7885UBeQidywptHH6ACZj71Ar6++DBc1mMlcwuvbeJCd3r3y8MQ5nLv5PZSN/tHr13w==", "license": "MIT", - "peer": true, "dependencies": { "@babel/core": "7.26.9", "@jridgewell/sourcemap-codec": "^1.4.14", @@ -1668,7 +1673,6 @@ "resolved": "https://registry.npmjs.org/@angular/core/-/core-19.2.18.tgz", "integrity": "sha512-+QRrf0Igt8ccUWXHA+7doK5W6ODyhHdqVyblSlcQ8OciwkzIIGGEYNZom5OZyWMh+oI54lcSeyV2O3xaDepSrQ==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1685,7 +1689,6 @@ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-19.2.18.tgz", "integrity": "sha512-pe40934jWhoS7DyGl7jyZdoj1gvBgur2t1zrJD+csEkTitYnW14+La2Pv6SW1pNX5nIzFsgsS9Nex1KcH5S6Tw==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1704,7 +1707,6 @@ "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-19.2.18.tgz", "integrity": "sha512-FEZLbpFgCyoRB5Qv30msDb1tJYpwwmkrQTOUUdcB6j0RjHDiSe9jEsArC2Qy0glofjzu9cPoBOcdxY5UocBvdg==", "license": "MIT", - "peer": true, "dependencies": { "@babel/core": "7.26.9", "@types/babel__core": "7.20.5", @@ -1774,7 +1776,6 @@ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.2.18.tgz", "integrity": "sha512-eahtsHPyXTYLARs9YOlXhnXGgzw0wcyOcDkBvNWK/3lA0NHIgIHmQgXAmBo+cJ+g9skiEQTD2OmSrrwbFKWJkw==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1815,7 +1816,6 @@ "resolved": "https://registry.npmjs.org/@angular/router/-/router-19.2.18.tgz", "integrity": "sha512-7cimxtPODSwokFQ0TRYzX0ad8Yjrl0MJfzaDCJejd1n/q7RZ7KZmHd0DS/LkDNXVMEh4swr00fK+3YWG/Szsrg==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1857,7 +1857,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", "license": "MIT", - "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", @@ -3911,6 +3910,7 @@ "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", "license": "MIT", "optional": true, + "peer": true, "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" @@ -3922,6 +3922,7 @@ "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", "license": "MIT", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.4.0" } @@ -3932,6 +3933,7 @@ "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", "license": "MIT", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.4.0" } @@ -3947,6 +3949,7 @@ "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.71.0.tgz", "integrity": "sha512-2p9+dXWNQnp5Kq/V0XVWZiVAabzlX6rUW8vXXvtX8Yc1CkKgD93IPDEnv1sYZFkkS6HMvg6H0RMZfob/Co0YXA==", "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "^1.0.8", "@typescript-eslint/types": "^8.46.0", @@ -4380,6 +4383,7 @@ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "license": "MIT", + "peer": true, "dependencies": { "eslint-visitor-keys": "^3.4.3" }, @@ -4398,6 +4402,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "license": "Apache-2.0", + "peer": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4410,6 +4415,7 @@ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "license": "MIT", + "peer": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -4419,6 +4425,7 @@ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", @@ -4433,6 +4440,7 @@ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@eslint/core": "^0.17.0" }, @@ -4445,6 +4453,7 @@ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@types/json-schema": "^7.0.15" }, @@ -4457,6 +4466,7 @@ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", "license": "MIT", + "peer": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -4480,6 +4490,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -4491,17 +4502,50 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@eslint/js": { "version": "9.39.2", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", "license": "MIT", + "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -4538,6 +4582,7 @@ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "license": "Apache-2.0", + "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } @@ -4547,6 +4592,7 @@ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" @@ -4616,6 +4662,7 @@ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=18.18.0" } @@ -4625,6 +4672,7 @@ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" @@ -4638,6 +4686,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=12.22" }, @@ -4651,6 +4700,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=18.18" }, @@ -4908,7 +4958,6 @@ "integrity": "sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@inquirer/checkbox": "^4.1.2", "@inquirer/confirm": "^5.1.6", @@ -6155,6 +6204,7 @@ "resolved": "https://registry.npmjs.org/@mdit-vue/shared/-/shared-3.0.2.tgz", "integrity": "sha512-anFGls154h0iVzUt5O43EaqYvPwzfUxQ34QpNQsUQML7pbEJMhcgkRNvYw9hZBspab+/TP45agdPw5joh6/BBA==", "license": "MIT", + "peer": true, "dependencies": { "@mdit-vue/types": "3.0.2", "@types/markdown-it": "^14.1.2", @@ -6169,6 +6219,7 @@ "resolved": "https://registry.npmjs.org/@mdit-vue/types/-/types-3.0.2.tgz", "integrity": "sha512-00aAZ0F0NLik6I6Yba2emGbHLxv+QYrPH00qQ5dFKXlAo1Ll2RHDXwY7nN2WAfrx2pP+WrvSRFTGFCNGdzBDHw==", "license": "MIT", + "peer": true, "engines": { "node": ">=20.0.0" } @@ -6604,6 +6655,7 @@ "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", "license": "MIT", "optional": true, + "peer": true, "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", @@ -6671,7 +6723,6 @@ "resolved": "https://registry.npmjs.org/@ni/eslint-config-angular/-/eslint-config-angular-11.1.0.tgz", "integrity": "sha512-coaIf0cI5K01F1k5BtZ5YVeq6olM1H8GYeGGA9EwPDr31b1yrXL4lqh8wjSV/gf7dIpNfFdBBM1U+bmdMc5pww==", "license": "MIT", - "peer": true, "peerDependencies": { "@ni/eslint-config-javascript": "^5.1.4", "@ni/eslint-config-typescript": "^5.0.5", @@ -6683,7 +6734,6 @@ "resolved": "https://registry.npmjs.org/@ni/eslint-config-javascript/-/eslint-config-javascript-5.1.4.tgz", "integrity": "sha512-UvWMiPlRmTqS4GH4efxP/M6R2Mw2IEBpibgVSMU/0vrPqhs32BBKoIyewTPrMcxNEA0EAMYZETQqK+g5WrskgQ==", "license": "MIT", - "peer": true, "peerDependencies": { "@stylistic/eslint-plugin": "^5.4.0", "eslint": "^9.36.0", @@ -7176,6 +7226,7 @@ "hasInstallScript": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "detect-libc": "^2.0.3", "is-glob": "^4.0.3", @@ -7218,6 +7269,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -7239,6 +7291,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -7260,6 +7313,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -7281,6 +7335,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -7302,6 +7357,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -7323,6 +7379,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -7344,6 +7401,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -7365,6 +7423,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -7386,6 +7445,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -7407,6 +7467,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -7428,6 +7489,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -7449,6 +7511,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -7470,6 +7533,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -7484,7 +7548,8 @@ "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", "dev": true, "license": "MIT", - "optional": true + "optional": true, + "peer": true }, "node_modules/@parcel/watcher/node_modules/picomatch": { "version": "4.0.3", @@ -7493,6 +7558,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "engines": { "node": ">=12" }, @@ -7527,6 +7593,7 @@ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", "license": "MIT", + "peer": true, "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, @@ -7560,7 +7627,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-3.0.0.tgz", "integrity": "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-beta.47", @@ -7620,7 +7688,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -8157,7 +8224,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@schematics/angular": { "version": "19.2.19", @@ -8596,6 +8664,7 @@ "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.7.1.tgz", "integrity": "sha512-zjTUwIsEfT+k9BmXwq1QEFYsb4afBlsI1AXFyWQBgggMzwBFOuu92pGrE5OFx90IOjNl+lUbQoTG7f8S0PkOdg==", "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/types": "^8.53.1", @@ -8616,6 +8685,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -8887,6 +8957,7 @@ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -8906,6 +8977,7 @@ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "license": "Apache-2.0", + "peer": true, "dependencies": { "dequal": "^2.0.3" } @@ -8953,7 +9025,6 @@ "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.18.0.tgz", "integrity": "sha512-Gczd4GbK1DNgy/QUPElMVozoa0GW9mW8E31VIi7Q4a9PHHz8PcrxPmuWwtJ2q0PF8MWpOSLuBXoQTWaXZRPRnQ==", "license": "MIT", - "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -9136,7 +9207,6 @@ "resolved": "https://registry.npmjs.org/@tiptap/suggestion/-/suggestion-3.18.0.tgz", "integrity": "sha512-AxJfM34e6wFPKVsfyXSvHN1wBBiXIm65hUmY+newop+DMeOjsvkO7M6j7tzUR2Nnrh1AQEsVr6iR0UzO91PBSA==", "license": "MIT", - "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" @@ -9219,6 +9289,7 @@ "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", "license": "MIT", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.4.0" } @@ -9227,7 +9298,8 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/babel__core": { "version": "7.20.5", @@ -9305,13 +9377,15 @@ "version": "5.2.3", "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.3.tgz", "integrity": "sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/command-line-usage": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.4.tgz", "integrity": "sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/connect": { "version": "3.4.38", @@ -9531,13 +9605,15 @@ "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/katex": { "version": "0.16.8", "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.8.tgz", "integrity": "sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/linkify-it": { "version": "5.0.0", @@ -9596,7 +9672,6 @@ "integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -9658,7 +9733,6 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.10.tgz", "integrity": "sha512-WPigyYuGhgZ/cTPRXB2EwUw+XvsRA3GqHlsP4qteqrnnjDrApbS7MxcGr/hke5iUoeB7E/gQtrs9I37zAJ0Vjw==", "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -9796,6 +9870,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.54.0.tgz", "integrity": "sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==", "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.54.0", @@ -9824,6 +9899,7 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "license": "MIT", + "peer": true, "engines": { "node": ">= 4" } @@ -9858,6 +9934,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.54.0.tgz", "integrity": "sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==", "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.54.0", "@typescript-eslint/types": "^8.54.0", @@ -9879,6 +9956,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.54.0.tgz", "integrity": "sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==", "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/types": "8.54.0", "@typescript-eslint/visitor-keys": "8.54.0" @@ -9896,6 +9974,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.54.0.tgz", "integrity": "sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==", "license": "MIT", + "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -9912,6 +9991,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.54.0.tgz", "integrity": "sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==", "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/types": "8.54.0", "@typescript-eslint/typescript-estree": "8.54.0", @@ -9950,6 +10030,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.54.0.tgz", "integrity": "sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==", "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/project-service": "8.54.0", "@typescript-eslint/tsconfig-utils": "8.54.0", @@ -9977,6 +10058,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "license": "MIT", + "peer": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -9986,6 +10068,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "license": "ISC", + "peer": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -10025,6 +10108,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.54.0.tgz", "integrity": "sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==", "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/types": "8.54.0", "eslint-visitor-keys": "^4.2.1" @@ -10037,6 +10121,19 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@unrs/resolver-binding-android-arm-eabi": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", @@ -10048,7 +10145,8 @@ "optional": true, "os": [ "android" - ] + ], + "peer": true }, "node_modules/@unrs/resolver-binding-android-arm64": { "version": "1.11.1", @@ -10061,7 +10159,8 @@ "optional": true, "os": [ "android" - ] + ], + "peer": true }, "node_modules/@unrs/resolver-binding-darwin-arm64": { "version": "1.11.1", @@ -10074,7 +10173,8 @@ "optional": true, "os": [ "darwin" - ] + ], + "peer": true }, "node_modules/@unrs/resolver-binding-darwin-x64": { "version": "1.11.1", @@ -10087,7 +10187,8 @@ "optional": true, "os": [ "darwin" - ] + ], + "peer": true }, "node_modules/@unrs/resolver-binding-freebsd-x64": { "version": "1.11.1", @@ -10100,7 +10201,8 @@ "optional": true, "os": [ "freebsd" - ] + ], + "peer": true }, "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { "version": "1.11.1", @@ -10113,7 +10215,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { "version": "1.11.1", @@ -10126,7 +10229,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { "version": "1.11.1", @@ -10139,7 +10243,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@unrs/resolver-binding-linux-arm64-musl": { "version": "1.11.1", @@ -10152,7 +10257,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { "version": "1.11.1", @@ -10165,7 +10271,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { "version": "1.11.1", @@ -10178,7 +10285,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { "version": "1.11.1", @@ -10191,7 +10299,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { "version": "1.11.1", @@ -10204,7 +10313,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@unrs/resolver-binding-linux-x64-gnu": { "version": "1.11.1", @@ -10217,7 +10327,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@unrs/resolver-binding-linux-x64-musl": { "version": "1.11.1", @@ -10230,7 +10341,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@unrs/resolver-binding-wasm32-wasi": { "version": "1.11.1", @@ -10241,6 +10353,7 @@ ], "license": "MIT", "optional": true, + "peer": true, "dependencies": { "@napi-rs/wasm-runtime": "^0.2.11" }, @@ -10259,7 +10372,8 @@ "optional": true, "os": [ "win32" - ] + ], + "peer": true }, "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { "version": "1.11.1", @@ -10272,7 +10386,8 @@ "optional": true, "os": [ "win32" - ] + ], + "peer": true }, "node_modules/@unrs/resolver-binding-win32-x64-msvc": { "version": "1.11.1", @@ -10285,7 +10400,8 @@ "optional": true, "os": [ "win32" - ] + ], + "peer": true }, "node_modules/@vitejs/plugin-react-swc": { "version": "4.2.2", @@ -10591,7 +10707,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -10604,6 +10719,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "license": "MIT", + "peer": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -10652,7 +10768,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -10793,6 +10908,7 @@ "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-21.1.0.tgz", "integrity": "sha512-kQrYLxhC+NTVVZ4CCzGF6L/uPVOzJmD1T3XgbiUnP7oTeVFOFgEUu6IKNwCDkpFoBVqDKQivlX4RUFqqnWFlEA==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@swc/helpers": "^0.5.11", "@types/command-line-args": "^5.2.3", @@ -10813,6 +10929,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.9.tgz", "integrity": "sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==", "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -10822,6 +10939,7 @@ "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", "license": "MIT", + "peer": true, "engines": { "node": ">=14" } @@ -10846,6 +10964,7 @@ "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", "license": "MIT", + "peer": true, "engines": { "node": ">=12.17" } @@ -10931,6 +11050,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", @@ -11134,6 +11254,7 @@ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">= 0.4" } @@ -11596,7 +11717,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -11958,6 +12078,7 @@ "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", "license": "MIT", + "peer": true, "dependencies": { "chalk": "^4.1.2" }, @@ -12413,6 +12534,7 @@ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-6.0.1.tgz", "integrity": "sha512-Jr3eByUjqyK0qd8W0SGFW1nZwqCaNCtbXjRo2cRJC1OYxWl3MZ5t1US3jq+cO4sPavqgw4l9BMGX0CBe+trepg==", "license": "MIT", + "peer": true, "dependencies": { "array-back": "^6.2.2", "find-replace": "^5.0.2", @@ -12436,6 +12558,7 @@ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.3.tgz", "integrity": "sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==", "license": "MIT", + "peer": true, "dependencies": { "array-back": "^6.2.2", "chalk-template": "^0.4.0", @@ -12461,6 +12584,7 @@ "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", "license": "MIT", + "peer": true, "engines": { "node": ">= 12.0.0" } @@ -13000,14 +13124,14 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/cross-env": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-10.1.0.tgz", "integrity": "sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==", "license": "MIT", - "peer": true, "dependencies": { "@epic-web/invariant": "^1.0.0", "cross-spawn": "^7.0.6" @@ -13302,7 +13426,6 @@ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "license": "ISC", - "peer": true, "engines": { "node": ">=12" } @@ -13506,7 +13629,8 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/deepmerge": { "version": "4.3.1", @@ -13695,8 +13819,7 @@ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1467305.tgz", "integrity": "sha512-LxwMLqBoPPGpMdRL4NkLFRNy3QLp6Uqa7GNp1v6JaBheop2QrB9Q7q0A/q/CYYP9sBfZdHOyszVx4gc9zyk7ow==", "dev": true, - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/di": { "version": "0.0.1", @@ -13710,6 +13833,7 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "license": "MIT", + "peer": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -13756,7 +13880,8 @@ "version": "0.5.16", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/dom-serialize": { "version": "2.2.1", @@ -13943,6 +14068,7 @@ "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-2.0.1.tgz", "integrity": "sha512-1QFuh8l7LqUcKe24LsPUNzjrzJQ7pgRwp1QMcZ5MX6mFplk2zQ08NVCM84++1cveaUUYtcCYHmeFEuNg16sU4g==", "license": "MIT", + "peer": true, "engines": { "node": ">=10.0.0" } @@ -14161,6 +14287,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "prr": "~1.0.1" }, @@ -14543,6 +14670,7 @@ "resolved": "https://registry.npmjs.org/eslint-import-context/-/eslint-import-context-0.1.9.tgz", "integrity": "sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==", "license": "MIT", + "peer": true, "dependencies": { "get-tsconfig": "^4.10.1", "stable-hash-x": "^0.2.0" @@ -14567,6 +14695,7 @@ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "license": "MIT", + "peer": true, "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -14578,6 +14707,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "license": "MIT", + "peer": true, "dependencies": { "ms": "^2.1.1" } @@ -14622,6 +14752,7 @@ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", "license": "MIT", + "peer": true, "dependencies": { "debug": "^3.2.7" }, @@ -14639,6 +14770,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "license": "MIT", + "peer": true, "dependencies": { "ms": "^2.1.1" } @@ -14682,6 +14814,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "license": "MIT", + "peer": true, "dependencies": { "ms": "^2.1.1" } @@ -14691,6 +14824,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", + "peer": true, "bin": { "semver": "bin/semver.js" } @@ -14700,6 +14834,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-60.8.3.tgz", "integrity": "sha512-4191bTMvnd5WUtopCdzNhQchvv/MxtPD86ZGl3vem8Ibm22xJhKuIyClmgSxw+YERtorVc/NhG+bGjfFVa6+VQ==", "license": "BSD-3-Clause", + "peer": true, "dependencies": { "@es-joy/jsdoccomment": "~0.71.0", "are-docs-informative": "^0.0.2", @@ -14726,6 +14861,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -14733,11 +14869,43 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-markdown-links": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown-links/-/eslint-plugin-markdown-links-0.7.1.tgz", - "integrity": "sha512-c6HAhdS3GmNLOzEuauGZ1+kkr20ruAHuF5rzwT48PdfZLTvPLeXa1Mb6HLdG8koLvwiLaIsXd8CntO/dt6UZug==", - "license": "MIT", + "node_modules/eslint-plugin-jsdoc/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-markdown-links": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown-links/-/eslint-plugin-markdown-links-0.7.1.tgz", + "integrity": "sha512-c6HAhdS3GmNLOzEuauGZ1+kkr20ruAHuF5rzwT48PdfZLTvPLeXa1Mb6HLdG8koLvwiLaIsXd8CntO/dt6UZug==", + "license": "MIT", + "peer": true, "dependencies": { "@mdit-vue/shared": "^3.0.2", "entities": "^7.0.0", @@ -14763,6 +14931,7 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", "license": "BSD-2-Clause", + "peer": true, "engines": { "node": ">=0.12" }, @@ -14802,6 +14971,23 @@ "eslint": ">=9.0.0" } }, + "node_modules/eslint-plugin-markdown-preferences/node_modules/string-width": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", + "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", + "license": "MIT", + "peer": true, + "dependencies": { + "get-east-asian-width": "^1.3.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-plugin-react": { "version": "7.37.5", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", @@ -14912,6 +15098,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "license": "BSD-2-Clause", + "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -14928,6 +15115,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "license": "Apache-2.0", + "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -14940,6 +15128,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14956,6 +15145,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -14963,11 +15153,43 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "license": "ISC", + "peer": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -14979,13 +15201,15 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/espree": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "license": "BSD-2-Clause", + "peer": true, "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", @@ -15016,6 +15240,7 @@ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "license": "BSD-3-Clause", + "peer": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -15304,7 +15529,8 @@ "url": "https://opencollective.com/fastify" } ], - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/fast-deep-equal": { "version": "3.1.3", @@ -15339,13 +15565,15 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/fast-uri": { "version": "3.1.0", @@ -15377,6 +15605,7 @@ "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", "license": "MIT", + "peer": true, "dependencies": { "format": "^0.2.0" }, @@ -15426,6 +15655,7 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "license": "MIT", + "peer": true, "dependencies": { "flat-cache": "^4.0.0" }, @@ -15513,6 +15743,7 @@ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-5.0.2.tgz", "integrity": "sha512-Y45BAiE3mz2QsrN2fb5QEtO4qb44NcS7en/0y9PEVsg351HsLeVclP8QPMH79Le9sH3rs5RSwJu99W0WPZO43Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=14" }, @@ -15530,6 +15761,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "license": "MIT", + "peer": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -15566,6 +15798,7 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "license": "MIT", + "peer": true, "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" @@ -15578,7 +15811,8 @@ "version": "25.9.23", "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-25.9.23.tgz", "integrity": "sha512-MI1qs7Lo4Syw0EOzUl0xjs2lsoeqFku44KpngfIduHBYvzm8h2+7K8YMQh1JtVVVrUvhLpNwqVi4DERegUJhPQ==", - "license": "Apache-2.0" + "license": "Apache-2.0", + "peer": true }, "node_modules/flatted": { "version": "3.3.3", @@ -15913,6 +16147,7 @@ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.1.tgz", "integrity": "sha512-EoY1N2xCn44xU6750Sx7OjOIT59FkmstNc3X6y5xpz7D5cBtZRe/3pSlTkDJgqsOk3WwZPkWfonhhUJfttQo3w==", "license": "MIT", + "peer": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -15960,7 +16195,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/glob": { "version": "11.1.0", @@ -16043,7 +16279,6 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -16364,7 +16599,8 @@ "url": "https://patreon.com/mdevils" } ], - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/html-escaper": { "version": "2.0.2", @@ -16644,6 +16880,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "bin": { "image-size": "bin/image-size.js" }, @@ -17132,6 +17369,7 @@ "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", "license": "MIT", + "peer": true, "dependencies": { "semver": "^7.7.1" } @@ -17880,8 +18118,7 @@ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.13.0.tgz", "integrity": "sha512-vsYjfh7lyqvZX5QgqKc4YH8phs7g96Z8bsdIFNEU3VqXhlHaq+vov/Fgn/sr6MiUczdZkyXRC3TX369Ll4Nzbw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/jasmine/node_modules/brace-expansion": { "version": "2.0.2", @@ -18007,7 +18244,6 @@ "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "devOptional": true, "license": "MIT", - "peer": true, "bin": { "jiti": "bin/jiti.js" } @@ -18218,6 +18454,7 @@ "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-6.6.0.tgz", "integrity": "sha512-3hSD14nXx66Rspx1RMnz1Pj4JacrMBAsC0CrF9lZYO/Qsp5/oIr6KqujVUNhQu94B6mMip2ukki8MpEWZwyhKA==", "license": "MIT", + "peer": true, "engines": { "node": ">=20.0.0" } @@ -18238,6 +18475,7 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz", "integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==", + "peer": true, "engines": { "node": ">=0.8" } @@ -18246,7 +18484,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -18285,7 +18524,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/json5": { "version": "2.2.3", @@ -18360,7 +18600,6 @@ "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -18495,7 +18734,6 @@ "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "jasmine-core": "^4.1.0" }, @@ -18802,6 +19040,7 @@ "https://github.com/sponsors/katex" ], "license": "MIT", + "peer": true, "dependencies": { "commander": "^8.3.0" }, @@ -18814,6 +19053,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "license": "MIT", + "peer": true, "engines": { "node": ">= 12" } @@ -18823,6 +19063,7 @@ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "license": "MIT", + "peer": true, "dependencies": { "json-buffer": "3.0.1" } @@ -18881,7 +19122,6 @@ "integrity": "sha512-tkuLHQlvWUTeQ3doAqnHbNn8T6WX1KA8yvbKG9x4VtKtIjHsVKQZCH11zRgAfbDAXC2UNIg/K9BYAAcEzUIrNg==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -18937,6 +19177,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "bin": { "mime": "cli.js" }, @@ -18951,6 +19192,7 @@ "dev": true, "license": "BSD-3-Clause", "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -18960,6 +19202,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "license": "MIT", + "peer": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -19339,6 +19582,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "license": "MIT", + "peer": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -19387,7 +19631,8 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash.snakecase": { "version": "4.1.1", @@ -19695,6 +19940,7 @@ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "license": "MIT", + "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -19865,6 +20111,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", "license": "MIT", + "peer": true, "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", @@ -19883,6 +20130,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -19996,6 +20244,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-3.0.0.tgz", "integrity": "sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==", "license": "MIT", + "peer": true, "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", @@ -20228,6 +20477,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", "license": "MIT", + "peer": true, "dependencies": { "fault": "^2.0.0", "micromark-util-character": "^2.0.0", @@ -20365,6 +20615,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", "license": "MIT", + "peer": true, "dependencies": { "@types/katex": "^0.16.0", "devlop": "^1.0.0", @@ -20895,6 +21146,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -21161,6 +21413,7 @@ "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", "license": "MIT", + "peer": true, "bin": { "napi-postinstall": "lib/cli.js" }, @@ -21175,7 +21428,8 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/needle": { "version": "3.3.1", @@ -21184,6 +21438,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "iconv-lite": "^0.6.3", "sax": "^1.2.4" @@ -21202,6 +21457,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -21242,7 +21498,6 @@ "integrity": "sha512-dFuwFsDJMBSd1YtmLLcX5bNNUCQUlRqgf34aXA+79PmkOP+0eF8GP2949wq3+jMjmFTNm80Oo8IUYiSLwklKCQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rollup/plugin-json": "^6.1.0", "@rollup/wasm-node": "^4.24.0", @@ -21782,6 +22037,7 @@ "resolved": "https://registry.npmjs.org/object-deep-merge/-/object-deep-merge-1.0.5.tgz", "integrity": "sha512-3DioFgOzetbxbeUq8pB2NunXo8V0n4EvqsWM/cJoI6IA9zghd7cl/2pBOuWRf4dlvA+fcg5ugFMZaN2/RuoaGg==", "license": "MIT", + "peer": true, "dependencies": { "type-fest": "4.2.0" } @@ -21883,6 +22139,7 @@ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -21987,6 +22244,7 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "license": "MIT", + "peer": true, "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -22127,6 +22385,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "license": "MIT", + "peer": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -22310,6 +22569,7 @@ "resolved": "https://registry.npmjs.org/parse-imports-exports/-/parse-imports-exports-0.2.4.tgz", "integrity": "sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==", "license": "MIT", + "peer": true, "dependencies": { "parse-statements": "1.0.11" } @@ -22357,7 +22617,8 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/parse-statements/-/parse-statements-1.0.11.tgz", "integrity": "sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/parse-url": { "version": "9.2.0", @@ -22516,6 +22777,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^11.0.0", @@ -22532,6 +22794,7 @@ "version": "11.2.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", + "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" @@ -22807,7 +23070,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", @@ -22945,6 +23207,7 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8.0" } @@ -22970,6 +23233,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -22979,11 +23243,22 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/pretty-format/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -22995,7 +23270,8 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/prismjs": { "version": "1.30.0", @@ -23100,6 +23376,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.3.1.tgz", "integrity": "sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==", "license": "MIT", + "peer": true, "dependencies": { "prosemirror-transform": "^1.0.0" } @@ -23109,6 +23386,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz", "integrity": "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==", "license": "MIT", + "peer": true, "dependencies": { "prosemirror-state": "^1.0.0" } @@ -23118,6 +23396,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.7.1.tgz", "integrity": "sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==", "license": "MIT", + "peer": true, "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-state": "^1.0.0", @@ -23129,6 +23408,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.2.tgz", "integrity": "sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==", "license": "MIT", + "peer": true, "dependencies": { "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.1.0", @@ -23140,6 +23420,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.4.0.tgz", "integrity": "sha512-z00qvurSdCEWUIulij/isHaqu4uLS8r/Fi61IbjdIPJEonQgggbJsLnstW7Lgdk4zQ68/yr6B6bf7sJXowIgdQ==", "license": "MIT", + "peer": true, "dependencies": { "prosemirror-keymap": "^1.0.0", "prosemirror-model": "^1.0.0", @@ -23152,6 +23433,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.5.0.tgz", "integrity": "sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==", "license": "MIT", + "peer": true, "dependencies": { "prosemirror-state": "^1.2.2", "prosemirror-transform": "^1.0.0", @@ -23164,6 +23446,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.5.1.tgz", "integrity": "sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==", "license": "MIT", + "peer": true, "dependencies": { "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.0.0" @@ -23174,6 +23457,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.3.tgz", "integrity": "sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==", "license": "MIT", + "peer": true, "dependencies": { "prosemirror-state": "^1.0.0", "w3c-keyname": "^2.2.0" @@ -23195,6 +23479,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.2.5.tgz", "integrity": "sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==", "license": "MIT", + "peer": true, "dependencies": { "crelt": "^1.0.0", "prosemirror-commands": "^1.0.0", @@ -23207,7 +23492,6 @@ "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.4.tgz", "integrity": "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==", "license": "MIT", - "peer": true, "dependencies": { "orderedmap": "^2.0.0" } @@ -23217,6 +23501,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz", "integrity": "sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==", "license": "MIT", + "peer": true, "dependencies": { "prosemirror-model": "^1.25.0" } @@ -23226,6 +23511,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz", "integrity": "sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==", "license": "MIT", + "peer": true, "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-state": "^1.0.0", @@ -23237,7 +23523,6 @@ "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.4.tgz", "integrity": "sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==", "license": "MIT", - "peer": true, "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-transform": "^1.0.0", @@ -23249,6 +23534,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.8.5.tgz", "integrity": "sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==", "license": "MIT", + "peer": true, "dependencies": { "prosemirror-keymap": "^1.2.3", "prosemirror-model": "^1.25.4", @@ -23262,6 +23548,7 @@ "resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz", "integrity": "sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==", "license": "MIT", + "peer": true, "dependencies": { "@remirror/core-constants": "3.0.0", "escape-string-regexp": "^4.0.0" @@ -23277,6 +23564,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -23298,7 +23586,6 @@ "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.41.5.tgz", "integrity": "sha512-UDQbIPnDrjE8tqUBbPmCOZgtd75htE6W3r0JCmY9bL6W1iemDM37MZEKC49d+tdQ0v/CKx4gjxLoLsfkD2NiZA==", "license": "MIT", - "peer": true, "dependencies": { "prosemirror-model": "^1.20.0", "prosemirror-state": "^1.0.0", @@ -23376,7 +23663,8 @@ "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true, "license": "MIT", - "optional": true + "optional": true, + "peer": true }, "node_modules/pump": { "version": "3.0.3", @@ -23553,7 +23841,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -23563,7 +23850,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -23940,6 +24226,7 @@ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } @@ -24075,6 +24362,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", "license": "BlueOak-1.0.0", + "peer": true, "dependencies": { "minimatch": "^10.1.1", "minipass": "^7.1.2", @@ -24087,11 +24375,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "license": "BlueOak-1.0.0", + "peer": true, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/rimraf/node_modules/minimatch": { "version": "10.1.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", "license": "BlueOak-1.0.0", + "peer": true, "dependencies": { "@isaacs/brace-expansion": "^5.0.0" }, @@ -24102,6 +24401,33 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/rimraf/node_modules/path-scurry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "license": "BlueOak-1.0.0", + "peer": true, + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/robots-parser": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/robots-parser/-/robots-parser-3.0.1.tgz", @@ -24118,7 +24444,6 @@ "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -24220,7 +24545,8 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/run-applescript": { "version": "7.1.0", @@ -24272,7 +24598,6 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "license": "Apache-2.0", - "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -24362,7 +24687,6 @@ "integrity": "sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -24477,6 +24801,7 @@ "resolved": "https://registry.npmjs.org/sdbm/-/sdbm-3.0.0.tgz", "integrity": "sha512-9FHNk9qJKuRxkUeQQdRp8WLCFaL4hvPtYz/2xNAOkuZzQ3ZqMMkZ1CrkKPDA4lxbenMml0JRKHGyTyucK/JBBg==", "license": "MIT", + "peer": true, "engines": { "node": ">=20" }, @@ -25169,6 +25494,7 @@ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", "license": "MIT", + "peer": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -25252,6 +25578,7 @@ "resolved": "https://registry.npmjs.org/stable-hash-x/-/stable-hash-x-0.2.0.tgz", "integrity": "sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=12.0.0" } @@ -25284,7 +25611,6 @@ "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.3.tgz", "integrity": "sha512-kjsJ0hctkTO0ipHiyv1MY39wP4tAyVM7rPQGyVMU1iQ7NYHxthiiCHhFB/szmVjXdJa58fu3ZH5cwENMn8Y5eA==", "license": "MIT", - "peer": true, "dependencies": { "@storybook/global": "^5.0.0", "@storybook/icons": "^2.0.1", @@ -25449,22 +25775,6 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/string-width": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.1.tgz", - "integrity": "sha512-KpqHIdDL9KwYk22wEOg/VIqYbrnLeSApsKT/bSj6Ez7pn3CftUiLAv2Lccpq1ALcpLV9UX1Ppn92npZWu2w/aw==", - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.3.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", @@ -25645,6 +25955,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "license": "MIT", + "peer": true, "engines": { "node": ">=4" } @@ -25676,6 +25987,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "license": "MIT", + "peer": true, "engines": { "node": ">=8" }, @@ -25921,6 +26233,7 @@ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", "license": "MIT", + "peer": true, "dependencies": { "@pkgr/core": "^0.2.9" }, @@ -25942,6 +26255,7 @@ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-4.1.1.tgz", "integrity": "sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==", "license": "MIT", + "peer": true, "dependencies": { "array-back": "^6.2.2", "wordwrapjs": "^5.1.0" @@ -26148,7 +26462,6 @@ "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -26340,7 +26653,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -26472,6 +26784,7 @@ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", "license": "MIT", + "peer": true, "engines": { "node": ">=18.12" }, @@ -26494,6 +26807,7 @@ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "license": "MIT", + "peer": true, "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -26506,6 +26820,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "license": "MIT", + "peer": true, "dependencies": { "minimist": "^1.2.0" }, @@ -26517,8 +26832,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "peer": true + "license": "0BSD" }, "node_modules/tuf-js": { "version": "3.1.0", @@ -26642,6 +26956,7 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "license": "MIT", + "peer": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -26654,6 +26969,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.2.0.tgz", "integrity": "sha512-5zknd7Dss75pMSED270A1RQS3KloqRJA9XbXLe0eCxyw7xXFb3rd+9B0UQ/0E+LQT6lnrLviEolYORlRWamn4w==", "license": "(MIT OR CC0-1.0)", + "peer": true, "engines": { "node": ">=16" }, @@ -26778,7 +27094,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -26816,6 +27131,7 @@ "resolved": "https://registry.npmjs.org/typical/-/typical-7.3.0.tgz", "integrity": "sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw==", "license": "MIT", + "peer": true, "engines": { "node": ">=12.17" } @@ -26876,6 +27192,7 @@ "resolved": "https://registry.npmjs.org/undici/-/undici-7.20.0.tgz", "integrity": "sha512-MJZrkjyd7DeC+uPZh+5/YaMDxFiiEEaDgbUSVMXayofAkDWF1088CDo+2RPg7B1BuS1qf1vgNE7xqwPxE0DuSQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=20.18.1" } @@ -27020,6 +27337,7 @@ "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", "license": "MIT", + "peer": true, "dependencies": { "@types/unist": "^3.0.0", "unist-util-visit": "^5.0.0" @@ -27190,6 +27508,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "license": "BSD-2-Clause", + "peer": true, "dependencies": { "punycode": "^2.1.0" } @@ -27199,6 +27518,7 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "license": "MIT", + "peer": true, "engines": { "node": ">=6" } @@ -27344,7 +27664,6 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -28021,7 +28340,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -28072,7 +28390,8 @@ "version": "2.2.8", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/watchpack": { "version": "2.4.2", @@ -28135,7 +28454,6 @@ "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", @@ -28213,7 +28531,6 @@ "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", @@ -28633,6 +28950,7 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -28642,6 +28960,7 @@ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.1.tgz", "integrity": "sha512-0yweIbkINJodk27gX9LBGMzyQdBDan3s/dEAiwBOj+Mf0PPyWL6/rikalkv8EeD0E8jm4o5RXEOrFTP3NXbhJg==", "license": "MIT", + "peer": true, "engines": { "node": ">=12.17" } @@ -28895,7 +29214,6 @@ "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "dev": true, "license": "ISC", - "peer": true, "bin": { "yaml": "bin.mjs" }, @@ -29010,7 +29328,6 @@ "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -29032,8 +29349,7 @@ "version": "0.15.1", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.1.tgz", "integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/zwitch": { "version": "2.0.4", diff --git a/packages/angular-workspace/example-client-app/src/app/app.module.ts b/packages/angular-workspace/example-client-app/src/app/app.module.ts index c3742ceb2d..eebeec029d 100644 --- a/packages/angular-workspace/example-client-app/src/app/app.module.ts +++ b/packages/angular-workspace/example-client-app/src/app/app.module.ts @@ -35,7 +35,9 @@ import { NimbleRichTextMentionUsersModule } from '@ni/nimble-angular/rich-text-m import { OkButtonModule } from 'ok-angular/button/ok-button.module'; import { SprightChatConversationModule } from '@ni/spright-angular/chat/conversation'; import { SprightChatInputModule } from '@ni/spright-angular/chat/input'; -import { SprightChatMessageModule } from '@ni/spright-angular/chat/message'; +import { SprightChatMessageInboundModule } from '@ni/spright-angular/chat/message/inbound'; +import { SprightChatMessageOutboundModule } from '@ni/spright-angular/chat/message/outbound'; +import { SprightChatMessageSystemModule } from '@ni/spright-angular/chat/message/system'; import { SprightRectangleModule } from '@ni/spright-angular/rectangle'; import { AppComponent } from './app.component'; import { CustomAppComponent } from './customapp/customapp.component'; @@ -116,7 +118,9 @@ import { CustomAppComponent } from './customapp/customapp.component'; OkButtonModule, SprightChatConversationModule, SprightChatInputModule, - SprightChatMessageModule, + SprightChatMessageInboundModule, + SprightChatMessageOutboundModule, + SprightChatMessageSystemModule, SprightRectangleModule, RouterModule.forRoot( [ diff --git a/packages/angular-workspace/example-client-app/src/app/customapp/customapp.component.html b/packages/angular-workspace/example-client-app/src/app/customapp/customapp.component.html index 735eedaa49..f6e504bbf5 100644 --- a/packages/angular-workspace/example-client-app/src/app/customapp/customapp.component.html +++ b/packages/angular-workspace/example-client-app/src/app/customapp/customapp.component.html @@ -471,12 +471,12 @@
Chat Conversation and Messages (Spright)
- To start, press any key. - Where is the Any key? - + To start, press any key. + Where is the Any key? + - - + + Copy @@ -486,8 +486,8 @@ Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Order a tab Check core temperature - - {{message}} + + {{message}} diff --git a/packages/angular-workspace/spright-angular/chat/message/inbound/ng-package.json b/packages/angular-workspace/spright-angular/chat/message/inbound/ng-package.json new file mode 100644 index 0000000000..39cd55ac3e --- /dev/null +++ b/packages/angular-workspace/spright-angular/chat/message/inbound/ng-package.json @@ -0,0 +1,6 @@ +{ + "$schema": "../../../../../../node_modules/ng-packagr/ng-package.schema.json", + "lib": { + "entryFile": "public-api.ts" + } +} diff --git a/packages/angular-workspace/spright-angular/chat/message/inbound/public-api.ts b/packages/angular-workspace/spright-angular/chat/message/inbound/public-api.ts new file mode 100644 index 0000000000..6fd3ca1925 --- /dev/null +++ b/packages/angular-workspace/spright-angular/chat/message/inbound/public-api.ts @@ -0,0 +1,2 @@ +export * from './spright-chat-message-inbound.directive'; +export * from './spright-chat-message-inbound.module'; diff --git a/packages/angular-workspace/spright-angular/chat/message/inbound/spright-chat-message-inbound.directive.ts b/packages/angular-workspace/spright-angular/chat/message/inbound/spright-chat-message-inbound.directive.ts new file mode 100644 index 0000000000..cd3c2b0c31 --- /dev/null +++ b/packages/angular-workspace/spright-angular/chat/message/inbound/spright-chat-message-inbound.directive.ts @@ -0,0 +1,16 @@ +import { Directive, ElementRef, Renderer2 } from '@angular/core'; +import { type ChatMessageInbound, chatMessageInboundTag } from '@ni/spright-components/dist/esm/chat/message/inbound'; + +export type { ChatMessageInbound }; +export { chatMessageInboundTag }; + +/** + * Directive to provide Angular integration for the chat inbound message. + */ +@Directive({ + selector: 'spright-chat-message-inbound', + standalone: false +}) +export class SprightChatMessageInboundDirective { + public constructor(private readonly renderer: Renderer2, private readonly elementRef: ElementRef) {} +} diff --git a/packages/angular-workspace/spright-angular/chat/message/inbound/spright-chat-message-inbound.module.ts b/packages/angular-workspace/spright-angular/chat/message/inbound/spright-chat-message-inbound.module.ts new file mode 100644 index 0000000000..2f9899777a --- /dev/null +++ b/packages/angular-workspace/spright-angular/chat/message/inbound/spright-chat-message-inbound.module.ts @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { SprightChatMessageInboundDirective } from './spright-chat-message-inbound.directive'; + +import '@ni/spright-components/dist/esm/chat/message/inbound'; + +@NgModule({ + declarations: [ + SprightChatMessageInboundDirective + ], + imports: [CommonModule], + exports: [ + SprightChatMessageInboundDirective + ] +}) +export class SprightChatMessageInboundModule { } diff --git a/packages/angular-workspace/spright-angular/chat/message/inbound/tests/spright-chat-message-inbound.directive.spec.ts b/packages/angular-workspace/spright-angular/chat/message/inbound/tests/spright-chat-message-inbound.directive.spec.ts new file mode 100644 index 0000000000..cc2abef909 --- /dev/null +++ b/packages/angular-workspace/spright-angular/chat/message/inbound/tests/spright-chat-message-inbound.directive.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; +import { SprightChatMessageInboundModule } from '../spright-chat-message-inbound.module'; + +describe('Spright chat message inbound', () => { + describe('module', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [SprightChatMessageInboundModule] + }); + }); + + it('custom element is defined', () => { + expect(customElements.get('spright-chat-message-inbound')).not.toBeUndefined(); + }); + }); +}); diff --git a/packages/angular-workspace/spright-angular/chat/message/outbound/ng-package.json b/packages/angular-workspace/spright-angular/chat/message/outbound/ng-package.json new file mode 100644 index 0000000000..39cd55ac3e --- /dev/null +++ b/packages/angular-workspace/spright-angular/chat/message/outbound/ng-package.json @@ -0,0 +1,6 @@ +{ + "$schema": "../../../../../../node_modules/ng-packagr/ng-package.schema.json", + "lib": { + "entryFile": "public-api.ts" + } +} diff --git a/packages/angular-workspace/spright-angular/chat/message/outbound/public-api.ts b/packages/angular-workspace/spright-angular/chat/message/outbound/public-api.ts new file mode 100644 index 0000000000..999ce64c9f --- /dev/null +++ b/packages/angular-workspace/spright-angular/chat/message/outbound/public-api.ts @@ -0,0 +1,2 @@ +export * from './spright-chat-message-outbound.directive'; +export * from './spright-chat-message-outbound.module'; diff --git a/packages/angular-workspace/spright-angular/chat/message/outbound/spright-chat-message-outbound.directive.ts b/packages/angular-workspace/spright-angular/chat/message/outbound/spright-chat-message-outbound.directive.ts new file mode 100644 index 0000000000..cb70d04fe7 --- /dev/null +++ b/packages/angular-workspace/spright-angular/chat/message/outbound/spright-chat-message-outbound.directive.ts @@ -0,0 +1,16 @@ +import { Directive, ElementRef, Renderer2 } from '@angular/core'; +import { type ChatMessageOutbound, chatMessageOutboundTag } from '@ni/spright-components/dist/esm/chat/message/outbound'; + +export type { ChatMessageOutbound }; +export { chatMessageOutboundTag }; + +/** + * Directive to provide Angular integration for the chat outbound message. + */ +@Directive({ + selector: 'spright-chat-message-outbound', + standalone: false +}) +export class SprightChatMessageOutboundDirective { + public constructor(private readonly renderer: Renderer2, private readonly elementRef: ElementRef) {} +} diff --git a/packages/angular-workspace/spright-angular/chat/message/outbound/spright-chat-message-outbound.module.ts b/packages/angular-workspace/spright-angular/chat/message/outbound/spright-chat-message-outbound.module.ts new file mode 100644 index 0000000000..40aad2bbc6 --- /dev/null +++ b/packages/angular-workspace/spright-angular/chat/message/outbound/spright-chat-message-outbound.module.ts @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { SprightChatMessageOutboundDirective } from './spright-chat-message-outbound.directive'; + +import '@ni/spright-components/dist/esm/chat/message/outbound'; + +@NgModule({ + declarations: [ + SprightChatMessageOutboundDirective + ], + imports: [CommonModule], + exports: [ + SprightChatMessageOutboundDirective + ] +}) +export class SprightChatMessageOutboundModule { } diff --git a/packages/angular-workspace/spright-angular/chat/message/outbound/tests/spright-chat-message-outbound.directive.spec.ts b/packages/angular-workspace/spright-angular/chat/message/outbound/tests/spright-chat-message-outbound.directive.spec.ts new file mode 100644 index 0000000000..01bfab0889 --- /dev/null +++ b/packages/angular-workspace/spright-angular/chat/message/outbound/tests/spright-chat-message-outbound.directive.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; +import { SprightChatMessageOutboundModule } from '../spright-chat-message-outbound.module'; + +describe('Spright chat message outbound', () => { + describe('module', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [SprightChatMessageOutboundModule] + }); + }); + + it('custom element is defined', () => { + expect(customElements.get('spright-chat-message-outbound')).not.toBeUndefined(); + }); + }); +}); diff --git a/packages/angular-workspace/spright-angular/chat/message/spright-chat-message.directive.ts b/packages/angular-workspace/spright-angular/chat/message/spright-chat-message.directive.ts index dba9a2bb47..3d1b7241f3 100644 --- a/packages/angular-workspace/spright-angular/chat/message/spright-chat-message.directive.ts +++ b/packages/angular-workspace/spright-angular/chat/message/spright-chat-message.directive.ts @@ -8,6 +8,7 @@ export { chatMessageTag }; /** * Directive to provide Angular integration for the chat message. + * @deprecated Use specific message component types instead */ @Directive({ selector: 'spright-chat-message', diff --git a/packages/angular-workspace/spright-angular/chat/message/system/ng-package.json b/packages/angular-workspace/spright-angular/chat/message/system/ng-package.json new file mode 100644 index 0000000000..39cd55ac3e --- /dev/null +++ b/packages/angular-workspace/spright-angular/chat/message/system/ng-package.json @@ -0,0 +1,6 @@ +{ + "$schema": "../../../../../../node_modules/ng-packagr/ng-package.schema.json", + "lib": { + "entryFile": "public-api.ts" + } +} diff --git a/packages/angular-workspace/spright-angular/chat/message/system/public-api.ts b/packages/angular-workspace/spright-angular/chat/message/system/public-api.ts new file mode 100644 index 0000000000..5555d7ee22 --- /dev/null +++ b/packages/angular-workspace/spright-angular/chat/message/system/public-api.ts @@ -0,0 +1,2 @@ +export * from './spright-chat-message-system.directive'; +export * from './spright-chat-message-system.module'; diff --git a/packages/angular-workspace/spright-angular/chat/message/system/spright-chat-message-system.directive.ts b/packages/angular-workspace/spright-angular/chat/message/system/spright-chat-message-system.directive.ts new file mode 100644 index 0000000000..a39abbf632 --- /dev/null +++ b/packages/angular-workspace/spright-angular/chat/message/system/spright-chat-message-system.directive.ts @@ -0,0 +1,16 @@ +import { Directive, ElementRef, Renderer2 } from '@angular/core'; +import { type ChatMessageSystem, chatMessageSystemTag } from '@ni/spright-components/dist/esm/chat/message/system'; + +export type { ChatMessageSystem }; +export { chatMessageSystemTag }; + +/** + * Directive to provide Angular integration for the chat system message. + */ +@Directive({ + selector: 'spright-chat-message-system', + standalone: false +}) +export class SprightChatMessageSystemDirective { + public constructor(private readonly renderer: Renderer2, private readonly elementRef: ElementRef) {} +} diff --git a/packages/angular-workspace/spright-angular/chat/message/system/spright-chat-message-system.module.ts b/packages/angular-workspace/spright-angular/chat/message/system/spright-chat-message-system.module.ts new file mode 100644 index 0000000000..9896c52f87 --- /dev/null +++ b/packages/angular-workspace/spright-angular/chat/message/system/spright-chat-message-system.module.ts @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { SprightChatMessageSystemDirective } from './spright-chat-message-system.directive'; + +import '@ni/spright-components/dist/esm/chat/message/system'; + +@NgModule({ + declarations: [ + SprightChatMessageSystemDirective + ], + imports: [CommonModule], + exports: [ + SprightChatMessageSystemDirective + ] +}) +export class SprightChatMessageSystemModule { } diff --git a/packages/angular-workspace/spright-angular/chat/message/system/tests/spright-chat-message-system.directive.spec.ts b/packages/angular-workspace/spright-angular/chat/message/system/tests/spright-chat-message-system.directive.spec.ts new file mode 100644 index 0000000000..b63860a256 --- /dev/null +++ b/packages/angular-workspace/spright-angular/chat/message/system/tests/spright-chat-message-system.directive.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; +import { SprightChatMessageSystemModule } from '../spright-chat-message-system.module'; + +describe('Spright chat message system', () => { + describe('module', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [SprightChatMessageSystemModule] + }); + }); + + it('custom element is defined', () => { + expect(customElements.get('spright-chat-message-system')).not.toBeUndefined(); + }); + }); +}); diff --git a/packages/blazor-workspace/Examples/Demo.Shared/Pages/ComponentsDemo.razor b/packages/blazor-workspace/Examples/Demo.Shared/Pages/ComponentsDemo.razor index 8d9fcaa690..029c47227c 100644 --- a/packages/blazor-workspace/Examples/Demo.Shared/Pages/ComponentsDemo.razor +++ b/packages/blazor-workspace/Examples/Demo.Shared/Pages/ComponentsDemo.razor @@ -435,16 +435,16 @@
Chat Conversation and Messages (Spright)
- + To start, press any key. - - + + Where is the Any key? - - + + - - + + Copy @@ -458,12 +458,12 @@ Check core temperature - + @foreach(var message in _userMessages) { - + @message - + } diff --git a/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessage.razor.cs b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessage.razor.cs index ecebd30af3..5b89566781 100644 --- a/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessage.razor.cs +++ b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessage.razor.cs @@ -2,6 +2,9 @@ namespace SprightBlazor; +/// +/// SprightChatMessage is deprecated. Use specific message component types instead. +/// public partial class SprightChatMessage : ComponentBase { /// diff --git a/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageInbound.razor b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageInbound.razor new file mode 100644 index 0000000000..98bd13cbeb --- /dev/null +++ b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageInbound.razor @@ -0,0 +1,5 @@ +@namespace SprightBlazor + + @ChildContent + diff --git a/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageInbound.razor.cs b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageInbound.razor.cs new file mode 100644 index 0000000000..531e24da51 --- /dev/null +++ b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageInbound.razor.cs @@ -0,0 +1,18 @@ +using Microsoft.AspNetCore.Components; + +namespace SprightBlazor; + +public partial class SprightChatMessageInbound : ComponentBase +{ + /// + /// The child content of the element. + /// + [Parameter] + public RenderFragment? ChildContent { get; set; } + + /// + /// Any additional attributes that did not match known properties. + /// + [Parameter(CaptureUnmatchedValues = true)] + public IDictionary? AdditionalAttributes { get; set; } +} diff --git a/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageOutbound.razor b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageOutbound.razor new file mode 100644 index 0000000000..0e63f5a181 --- /dev/null +++ b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageOutbound.razor @@ -0,0 +1,5 @@ +@namespace SprightBlazor + + @ChildContent + diff --git a/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageOutbound.razor.cs b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageOutbound.razor.cs new file mode 100644 index 0000000000..2fd8e80623 --- /dev/null +++ b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageOutbound.razor.cs @@ -0,0 +1,18 @@ +using Microsoft.AspNetCore.Components; + +namespace SprightBlazor; + +public partial class SprightChatMessageOutbound : ComponentBase +{ + /// + /// The child content of the element. + /// + [Parameter] + public RenderFragment? ChildContent { get; set; } + + /// + /// Any additional attributes that did not match known properties. + /// + [Parameter(CaptureUnmatchedValues = true)] + public IDictionary? AdditionalAttributes { get; set; } +} diff --git a/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageSystem.cs b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageSystem.cs new file mode 100644 index 0000000000..17323ff131 --- /dev/null +++ b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageSystem.cs @@ -0,0 +1,18 @@ +using Microsoft.AspNetCore.Components; + +namespace SprightBlazor; + +public partial class SprightChatMessageSystem : ComponentBase +{ + /// + /// The child content of the element. + /// + [Parameter] + public RenderFragment? ChildContent { get; set; } + + /// + /// Any additional attributes that did not match known properties. + /// + [Parameter(CaptureUnmatchedValues = true)] + public IDictionary? AdditionalAttributes { get; set; } +} diff --git a/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageSystem.razor b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageSystem.razor new file mode 100644 index 0000000000..37629390a7 --- /dev/null +++ b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageSystem.razor @@ -0,0 +1,5 @@ +@namespace SprightBlazor + + @ChildContent + diff --git a/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageInboundTests.cs b/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageInboundTests.cs new file mode 100644 index 0000000000..c89f18a1a5 --- /dev/null +++ b/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageInboundTests.cs @@ -0,0 +1,33 @@ +using System; +using System.Linq.Expressions; +using Bunit; +using Xunit; + +namespace SprightBlazor.Tests.Unit.Components; + +/// +/// Test for . +/// +public class SprightChatMessageInboundTests +{ + [Fact] + public void SprightChatMessageInbound_Render_HasChatMessageMarkup() + { + var context = new TestContext(); + context.JSInterop.Mode = JSRuntimeMode.Loose; + var expectedMarkup = "spright-chat-message-inbound"; + + var component = context.RenderComponent(); + + Assert.Contains(expectedMarkup, component.Markup); + } + + [Fact] + public void SprightChatMessageInbound_SupportsAdditionalAttributes() + { + var context = new TestContext(); + context.JSInterop.Mode = JSRuntimeMode.Loose; + var exception = Record.Exception(() => context.RenderComponent(ComponentParameter.CreateParameter("class", "foo"))); + Assert.Null(exception); + } +} diff --git a/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageOutboundTests.cs b/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageOutboundTests.cs new file mode 100644 index 0000000000..769347f650 --- /dev/null +++ b/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageOutboundTests.cs @@ -0,0 +1,33 @@ +using System; +using System.Linq.Expressions; +using Bunit; +using Xunit; + +namespace SprightBlazor.Tests.Unit.Components; + +/// +/// Test for . +/// +public class SprightChatMessageOutboundTests +{ + [Fact] + public void SprightChatMessageOutbound_Render_HasChatMessageMarkup() + { + var context = new TestContext(); + context.JSInterop.Mode = JSRuntimeMode.Loose; + var expectedMarkup = "spright-chat-message-outbound"; + + var component = context.RenderComponent(); + + Assert.Contains(expectedMarkup, component.Markup); + } + + [Fact] + public void SprightChatMessageOutbound_SupportsAdditionalAttributes() + { + var context = new TestContext(); + context.JSInterop.Mode = JSRuntimeMode.Loose; + var exception = Record.Exception(() => context.RenderComponent(ComponentParameter.CreateParameter("class", "foo"))); + Assert.Null(exception); + } +} diff --git a/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageSystemTests.cs b/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageSystemTests.cs new file mode 100644 index 0000000000..8dac4dd8f1 --- /dev/null +++ b/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageSystemTests.cs @@ -0,0 +1,33 @@ +using System; +using System.Linq.Expressions; +using Bunit; +using Xunit; + +namespace SprightBlazor.Tests.Unit.Components; + +/// +/// Test for . +/// +public class SprightChatMessageSystemTests +{ + [Fact] + public void SprightChatMessageSystem_Render_HasChatMessageMarkup() + { + var context = new TestContext(); + context.JSInterop.Mode = JSRuntimeMode.Loose; + var expectedMarkup = "spright-chat-message-system"; + + var component = context.RenderComponent(); + + Assert.Contains(expectedMarkup, component.Markup); + } + + [Fact] + public void SprightChatMessageSystem_SupportsAdditionalAttributes() + { + var context = new TestContext(); + context.JSInterop.Mode = JSRuntimeMode.Loose; + var exception = Record.Exception(() => context.RenderComponent(ComponentParameter.CreateParameter("class", "foo"))); + Assert.Null(exception); + } +} \ No newline at end of file diff --git a/packages/react-workspace/react-client-app/src/components/App.tsx b/packages/react-workspace/react-client-app/src/components/App.tsx index 7c923fa814..a14c98fd53 100644 --- a/packages/react-workspace/react-client-app/src/components/App.tsx +++ b/packages/react-workspace/react-client-app/src/components/App.tsx @@ -58,7 +58,9 @@ import { NimbleMappingUser } from '@ni/nimble-react/mapping/user'; import { NimbleRichTextViewer } from '@ni/nimble-react/rich-text/viewer'; import { SprightChatConversation } from '@ni/spright-react/chat/conversation'; import { SprightChatInput } from '@ni/spright-react/chat/input'; -import { SprightChatMessage } from '@ni/spright-react/chat/message'; +import { SprightChatMessageInbound } from '@ni/spright-react/chat/message/inbound'; +import { SprightChatMessageOutbound } from '@ni/spright-react/chat/message/outbound'; +import { SprightChatMessageSystem } from '@ni/spright-react/chat/message/system'; import { NimbleIconCopyText } from '@ni/nimble-react/icons/copy-text'; import { NimbleIconWebviCustom } from '@ni/nimble-react/icons/webvi-custom'; @@ -1161,12 +1163,12 @@ export function App(): React.JSX.Element {
Chat Conversation and Messages (Spright)
- To start, press any key. - Where is the Any key? - + To start, press any key. + Where is the Any key? + - - + + Copy @@ -1176,11 +1178,11 @@ export function App(): React.JSX.Element { Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Order a tab Check core temperature - +
{chatUserMessages.map((message, index) => ( - + {message} - + ))} , +ChatMessageInboundOptions> = (context, definition) => html` +
+ ${startSlotTemplate(context, definition)} +
+ +
+ + ${endSlotTemplate(context, definition)} +
+`; diff --git a/packages/spright-components/src/chat/message/index.ts b/packages/spright-components/src/chat/message/index.ts index eee80ed989..0ba315a586 100644 --- a/packages/spright-components/src/chat/message/index.ts +++ b/packages/spright-components/src/chat/message/index.ts @@ -25,6 +25,7 @@ export type ChatMessageOptions = FoundationElementDefinition & StartEndOptions; /** * A Spright component for displaying a chat message + * @deprecated Use specific message component types instead */ export class ChatMessage extends FoundationElement { /** diff --git a/packages/spright-components/src/chat/message/outbound/index.ts b/packages/spright-components/src/chat/message/outbound/index.ts new file mode 100644 index 0000000000..30eb9e1818 --- /dev/null +++ b/packages/spright-components/src/chat/message/outbound/index.ts @@ -0,0 +1,27 @@ +import { + DesignSystem, + FoundationElement, +} from '@ni/fast-foundation'; +import { styles } from './styles'; +import { template } from './template'; + +declare global { + interface HTMLElementTagNameMap { + 'spright-chat-message-outbound': ChatMessageOutbound; + } +} + +/** + * A Spright component for displaying an outbound chat message + */ +export class ChatMessageOutbound extends FoundationElement { +} + +const sprightChatMessageOutbound = ChatMessageOutbound.compose({ + baseName: 'chat-message-outbound', + template, + styles +}); + +DesignSystem.getOrCreate().withPrefix('spright').register(sprightChatMessageOutbound()); +export const chatMessageOutboundTag = 'spright-chat-message-outbound'; diff --git a/packages/spright-components/src/chat/message/outbound/styles.ts b/packages/spright-components/src/chat/message/outbound/styles.ts new file mode 100644 index 0000000000..412c3b0667 --- /dev/null +++ b/packages/spright-components/src/chat/message/outbound/styles.ts @@ -0,0 +1,46 @@ +import { css } from '@ni/fast-element'; + +import { + bodyFont, + bodyFontColor, + borderHoverColor, + borderWidth, + fillSelectedColor, + mediumPadding, + standardPadding, +} from '@ni/nimble-components/dist/esm/theme-provider/design-tokens'; +import { display } from '../../../utilities/style/display'; + +export const styles = css` + ${display('flex')} + + :host { + min-width: ${standardPadding}; + min-height: ${standardPadding}; + + flex-direction: row; + justify-content: flex-end; + flex-shrink: 0; + font: ${bodyFont}; + color: ${bodyFontColor}; + } + + .container { + display: flex; + flex-direction: column; + max-width: calc(90%); + } + + .message-content { + width: fit-content; + height: fit-content; + overflow-x: auto; + } + + :host .message-content { + background: ${fillSelectedColor}; + border: ${borderWidth} solid ${borderHoverColor}; + border-radius: ${mediumPadding} ${mediumPadding} 0px ${mediumPadding}; + padding: ${mediumPadding}; + } +`; diff --git a/packages/spright-components/src/chat/message/outbound/template.ts b/packages/spright-components/src/chat/message/outbound/template.ts new file mode 100644 index 0000000000..59452b860a --- /dev/null +++ b/packages/spright-components/src/chat/message/outbound/template.ts @@ -0,0 +1,15 @@ +import { html, ViewTemplate } from '@ni/fast-element'; +import { + type FoundationElementTemplate +} from '@ni/fast-foundation'; +import type { ChatMessageOutbound } from '.'; + +export const template: FoundationElementTemplate< +ViewTemplate +> = () => html` +
+
+ +
+
+`; diff --git a/packages/spright-components/src/chat/message/styles.ts b/packages/spright-components/src/chat/message/styles.ts index e68c8c3a86..ffa78b65c8 100644 --- a/packages/spright-components/src/chat/message/styles.ts +++ b/packages/spright-components/src/chat/message/styles.ts @@ -22,8 +22,8 @@ export const styles = css` ${display('flex')} :host { - min-width: 16px; - min-height: 16px; + min-width: ${standardPadding}; + min-height: ${standardPadding}; flex-direction: row; justify-content: center; diff --git a/packages/spright-components/src/chat/message/system/index.ts b/packages/spright-components/src/chat/message/system/index.ts new file mode 100644 index 0000000000..cde64f992f --- /dev/null +++ b/packages/spright-components/src/chat/message/system/index.ts @@ -0,0 +1,27 @@ +import { + DesignSystem, + FoundationElement, +} from '@ni/fast-foundation'; +import { styles } from './styles'; +import { template } from './template'; + +declare global { + interface HTMLElementTagNameMap { + 'spright-chat-message-system': ChatMessageSystem; + } +} + +/** + * A Spright component for displaying an system chat message + */ +export class ChatMessageSystem extends FoundationElement { +} + +const sprightChatMessageSystem = ChatMessageSystem.compose({ + baseName: 'chat-message-system', + template, + styles +}); + +DesignSystem.getOrCreate().withPrefix('spright').register(sprightChatMessageSystem()); +export const chatMessageSystemTag = 'spright-chat-message-system'; diff --git a/packages/spright-components/src/chat/message/system/styles.ts b/packages/spright-components/src/chat/message/system/styles.ts new file mode 100644 index 0000000000..30126d0d32 --- /dev/null +++ b/packages/spright-components/src/chat/message/system/styles.ts @@ -0,0 +1,35 @@ +import { css } from '@ni/fast-element'; + +import { + bodyFont, + bodyFontColor, + standardPadding, +} from '@ni/nimble-components/dist/esm/theme-provider/design-tokens'; +import { display } from '../../../utilities/style/display'; + +export const styles = css` + ${display('flex')} + + :host { + min-width: ${standardPadding}; + min-height: ${standardPadding}; + + flex-direction: row; + justify-content: center; + flex-shrink: 0; + font: ${bodyFont}; + color: ${bodyFontColor}; + } + + .container { + display: flex; + flex-direction: column; + max-width: calc(90%); + } + + .message-content { + width: fit-content; + height: fit-content; + overflow-x: auto; + } +`; diff --git a/packages/spright-components/src/chat/message/system/template.ts b/packages/spright-components/src/chat/message/system/template.ts new file mode 100644 index 0000000000..5f9fe81c9f --- /dev/null +++ b/packages/spright-components/src/chat/message/system/template.ts @@ -0,0 +1,15 @@ +import { html, ViewTemplate } from '@ni/fast-element'; +import { + type FoundationElementTemplate +} from '@ni/fast-foundation'; +import type { ChatMessageSystem } from '.'; + +export const template: FoundationElementTemplate< +ViewTemplate +> = () => html` +
+
+ +
+
+`; diff --git a/packages/spright-components/src/chat/message/types.ts b/packages/spright-components/src/chat/message/types.ts index f4f93e0ba8..6e6d1101ee 100644 --- a/packages/spright-components/src/chat/message/types.ts +++ b/packages/spright-components/src/chat/message/types.ts @@ -1,6 +1,7 @@ /** * A message type in a chat conversation. * @public + * @deprecated Use specific message component types instead */ export const ChatMessageType = { system: undefined, diff --git a/packages/spright-components/src/chat/specs/README.md b/packages/spright-components/src/chat/specs/README.md index 503e6f260e..618f3cb2fa 100644 --- a/packages/spright-components/src/chat/specs/README.md +++ b/packages/spright-components/src/chat/specs/README.md @@ -5,7 +5,10 @@ This spec describes a set of components that can be used to compose a chat interface. This includes: - chat input: a text input, button, and related components for users to compose and send new messages -- chat message: a single entry in a chat conversation, including some content and metadata about the message +- chat messages: each a single entry in a chat conversation, including some content and metadata about the message + - inbound + - system + - outbound - chat conversation: a layout component that allows slotting messages and an input ### Background @@ -40,12 +43,24 @@ The message component will allow slotting arbitrary content, but any efforts to #### Chat message -The `spright-chat-message` has the following slot elements. +##### Common features + +The all Spright chat messages have the following slot elements. 1. `default` slot displays arbitrary slotted content. For example: text, rich text, buttons, images, or a spinner. + +The components also contains the following features: + +1. Layout content to the right, center, or left of parent container depending on the type of the message +1. Size based on content size with maximum width (but not height) based on parent's width. +1. Change the styling of the message depending on the type of message. For example: render outbound messages in a bubble with the tail pointing to the right but render system messages with no styling. + +##### Inbound message additional features + +In addition, inbound messages will add support these slots: + 1. `footer-actions` slot which is used to add action buttons below the main content. 1. `end` slot which is used to add text buttons. They are below any action buttons. - Nimble will set the height of the action buttons to `$ni-nimble-control-slim-height`. All action buttons must meet the following criteria 1. They are `nimble-button`s or any other button variant (toggle button, menu button, etc) @@ -59,12 +74,6 @@ All end text buttons must meet the following criteria 1. The `apperance` attribute is set to `block` 1. The buttons only have text -The component also contains the following features: - -1. Layout content to the right, center, or left of parent container depending on metadata about who sent the message. -1. Size based on content size with maximum width (but not height) based on parent's width. -1. Change the styling of the message depending on metadata about who sent the message. For example: render user messages in a bubble with the tail pointing to the right but render system messages with no styling. - #### Chat conversation 1. Lays out messages vertically based on their order. @@ -118,15 +127,15 @@ These components are competing against possible implementations within applicati ```html - + Hi, how can I help? - - + + I need to analyze my data to find anomalies. - - + + - + + - + ``` @@ -150,10 +159,10 @@ richText.markdown = 'Welcome **Homer**, how can I help?'; ```html - + Help with my taxes Provide me some life advice - + ``` @@ -165,11 +174,18 @@ richText.markdown = 'Welcome **Homer**, how can I help?'; ### API -#### Message +#### Messages + +Message components will be created with the following names: +- `spright-chat-message-inbound` +- `spright-chat-message-outbound` +- `spright-chat-message-system` + +##### Messages common API + +All message types will share the following API: -- _Component Name_ `spright-chat-message` - _Props/Attrs_ - - `message-type = "inbound" | "outbound" | "system"` - _Methods_ - _Events_ - _CSS Classes and CSS Custom Properties that affect the component_ @@ -185,6 +201,14 @@ richText.markdown = 'Welcome **Homer**, how can I help?'; - `(default)` - arbitrary content can be added to the default slot to be displayed within the message +##### Inbound message additional API + +- _Slots_ + - `footer-actions` + - Action buttons to display after the main content. + - `end` + - Buttons with text that are displayed at the bottom after any action buttons. + #### Conversation - _Component Name_ `spright-chat-conversation` diff --git a/packages/storybook/src/spright/chat/conversation/chat-conversation-matrix.stories.ts b/packages/storybook/src/spright/chat/conversation/chat-conversation-matrix.stories.ts index 73c7b1e7ca..02b07ce688 100644 --- a/packages/storybook/src/spright/chat/conversation/chat-conversation-matrix.stories.ts +++ b/packages/storybook/src/spright/chat/conversation/chat-conversation-matrix.stories.ts @@ -2,6 +2,9 @@ import type { StoryFn, Meta } from '@storybook/html-vite'; import { html, repeat, ViewTemplate } from '@ni/fast-element'; import { chatInputTag } from '@ni/spright-components/dist/esm/chat/input'; import { chatMessageTag } from '@ni/spright-components/dist/esm/chat/message'; +import { chatMessageInboundTag } from '@ni/spright-components/dist/esm/chat/message/inbound'; +import { chatMessageOutboundTag } from '@ni/spright-components/dist/esm/chat/message/outbound'; +import { chatMessageSystemTag } from '@ni/spright-components/dist/esm/chat/message/system'; import { ChatMessageType } from '@ni/spright-components/dist/esm/chat/message/types'; import { chatConversationTag } from '@ni/spright-components/dist/esm/chat/conversation'; import { @@ -25,9 +28,19 @@ const messageTypeStates = [ ['system', ChatMessageType.system] ] as const; type MessageTypeStates = (typeof messageTypeStates)[number]; -const outboundState = messageTypeStates[0]; -const inboundState = messageTypeStates[1]; -const systemState = messageTypeStates[2]; +const outboundTypeState = messageTypeStates[0]; +const inboundTypeState = messageTypeStates[1]; +const systemTypeState = messageTypeStates[2]; + +const messageComponentStates = [ + ['outbound', chatMessageOutboundTag], + ['inbound', chatMessageInboundTag], + ['system', chatMessageSystemTag] +] as const; +type MessageComponentStates = (typeof messageComponentStates)[number]; +const outboundComponentState = messageComponentStates[0]; +const inboundComponentState = messageComponentStates[1]; +const systemComponentState = messageComponentStates[2]; const metadata: Meta = { title: 'Tests Spright/Chat Conversation', @@ -64,7 +77,7 @@ const appearanceStates = [ ] as const; type AppearanceStates = (typeof appearanceStates)[number]; -const componentSizing = ( +const messageTypeSizing = ( [_messageTypeLabel, messageType]: MessageTypeStates, [viewportLabel, viewportWidth, viewportHeight]: ViewportStates, [contentWidthLabel, contentWidth]: ContentWidthStates, @@ -102,8 +115,8 @@ const componentSizing = ( `; export const outboundSizing: StoryFn = createStory(html` - ${createMatrix(componentSizing, [ - [outboundState], + ${createMatrix(messageTypeSizing, [ + [outboundTypeState], viewportStates, contentWidthStates, contentHeightStates @@ -111,8 +124,8 @@ export const outboundSizing: StoryFn = createStory(html` `); export const inboundSizing: StoryFn = createStory(html` - ${createMatrix(componentSizing, [ - [inboundState], + ${createMatrix(messageTypeSizing, [ + [inboundTypeState], viewportStates, contentWidthStates, contentHeightStates @@ -120,8 +133,72 @@ export const inboundSizing: StoryFn = createStory(html` `); export const systemSizing: StoryFn = createStory(html` - ${createMatrix(componentSizing, [ - [systemState], + ${createMatrix(messageTypeSizing, [ + [systemTypeState], + viewportStates, + contentWidthStates, + contentHeightStates + ])} +`); + +const messageComponentSizing = ( + [_messageTypeLabel, messageComponentType]: MessageComponentStates, + [viewportLabel, viewportWidth, viewportHeight]: ViewportStates, + [contentWidthLabel, contentWidth]: ContentWidthStates, + [contentHeightLabel, contentHeight]: ContentHeightStates +): ViewTemplate => html` +

+ viewport:${() => viewportLabel}, content:${() => contentWidthLabel},${() => contentHeightLabel} +

+
+ <${chatConversationTag} style=" + width: 100%; + height: 100%; + "> + <${messageComponentType}> +
+ + +
+`; + +export const outboundMessageSizing: StoryFn = createStory(html` + ${createMatrix(messageComponentSizing, [ + [outboundComponentState], + viewportStates, + contentWidthStates, + contentHeightStates + ])} +`); + +export const inboundMessageSizing: StoryFn = createStory(html` + ${createMatrix(messageComponentSizing, [ + [inboundComponentState], + viewportStates, + contentWidthStates, + contentHeightStates + ])} +`); + +export const systemMessageSizing: StoryFn = createStory(html` + ${createMatrix(messageComponentSizing, [ + [systemComponentState], viewportStates, contentWidthStates, contentHeightStates @@ -144,7 +221,7 @@ const endButtonStates = [ ] as const; type EndButtonStates = (typeof endButtonStates)[number]; -const slottedButtons = ( +const slottedButtonsMessageTypes = ( [_messageTypeLabel, messageType]: MessageTypeStates, [footerActionsLabel, footerActions]: FooterActionsStates, [endButtonsLabel, endButtons]: EndButtonStates @@ -187,13 +264,61 @@ const slottedButtons = ( `; export const slottedButtonsSizing: StoryFn = createMatrixThemeStory(html` - ${createMatrix(slottedButtons, [ + ${createMatrix(slottedButtonsMessageTypes, [ messageTypeStates, footerActionsStates, endButtonStates ])} `); +const slottedButtonsInboundMessageComponent = ( + [footerActionsLabel, footerActions]: FooterActionsStates, + [endButtonsLabel, endButtons]: EndButtonStates +): ViewTemplate => html` +

+ footer-actions:${() => footerActionsLabel}, end:${() => endButtonsLabel} +

+
+ <${chatConversationTag} style=" + width: 100%; + height: 100%; + "> + <${chatMessageInboundTag}> +
Placeholder text
+ ${repeat(() => footerActions, html` + <${buttonTag} content-hidden slot="footer-actions" appearance="ghost"> + <${iconThumbUpTag} slot="start"> + ${x => x} + + `)} + ${repeat(() => endButtons, html` + <${buttonTag} slot="end" appearance="block"> + ${x => x} + + `)} + + +
+`; + +export const slottedButtonsInboundMessageSizing: StoryFn = createMatrixThemeStory(html` + ${createMatrix(slottedButtonsInboundMessageComponent, [ + footerActionsStates, + endButtonStates + ])} +`); + const heightStates = [ ['shorter', '200px'], ['taller', '300px'] @@ -208,12 +333,12 @@ const conversationWithInput = ( width: 100%; height: ${height}; "> - <${chatMessageTag} message-type="inbound"> + <${chatMessageInboundTag}> Conversation is ${heightLabel} than the height of the messages. - - <${chatMessageTag} message-type="outbound"> + + <${chatMessageOutboundTag} message-type="outbound"> Conversation is ${heightLabel} than the height of the messages. - + <${chatInputTag} slot='input'>
@@ -237,12 +362,12 @@ const conversationWithAppearance = ([ appearance: ${() => appearanceLabel}

<${chatConversationTag} appearance="${() => appearance}"> - <${chatMessageTag} message-type="inbound"> + <${chatMessageInboundTag}> Hello. - - <${chatMessageTag} message-type="outbound"> + + <${chatMessageOutboundTag}> Greetings! - + <${chatInputTag} slot='input'> `; diff --git a/packages/storybook/src/spright/chat/conversation/chat-conversation.mdx b/packages/storybook/src/spright/chat/conversation/chat-conversation.mdx index 96e7bd393a..1367be6e77 100644 --- a/packages/storybook/src/spright/chat/conversation/chat-conversation.mdx +++ b/packages/storybook/src/spright/chat/conversation/chat-conversation.mdx @@ -1,13 +1,16 @@ import { Controls, Canvas, Meta, Title } from '@storybook/addon-docs/blocks'; +import { chatConversationTag } from '@ni/spright-components/dist/esm/chat/conversation'; +import { chatInputTag } from '@ni/spright-components/dist/esm/chat/input'; +import { chatMessageInboundTag } from '@ni/spright-components/dist/esm/chat/message/inbound'; +import { chatMessageOutboundTag } from '@ni/spright-components/dist/esm/chat/message/outbound'; +import { chatMessageSystemTag } from '@ni/spright-components/dist/esm/chat/message/system'; import * as conversationStories from './chat-conversation.stories'; import * as messageStories from '../message/chat-message.stories'; import * as inputStories from '../input/chat-input.stories'; import ComponentApisLink from '../../../docs/component-apis-link.mdx'; -import { chatConversationTag } from '@ni/spright-components/dist/esm/chat/conversation'; -import { chatInputTag } from '@ni/spright-components/dist/esm/chat/input'; -import { chatMessageTag } from '@ni/spright-components/dist/esm/chat/message'; import { Tag } from '../../../utilities/story-layout'; + @@ -30,31 +33,42 @@ components, like the input. <Canvas of={conversationStories.chatConversation} /> <Controls of={conversationStories.chatConversation} /> -### Chat message +### Chat messages -Use the <Tag name={chatMessageTag} /> element to display content in a message. -Clients can place any HTML content within the message. +Use one of the message types below to display chat messages. Clients can place any HTML content within the message. -#### Text message content +#### Inbound message -<Canvas of={messageStories.chatMessageText} /> -<Controls of={messageStories.chatMessageText} /> +Use the <Tag name={chatMessageInboundTag} /> element to display content in an inbound message. -#### Rich text message content +##### Rich text inbound message content <Canvas of={messageStories.chatMessageRichText} /> <Controls of={messageStories.chatMessageRichText} /> -#### Spinner message content - -<Canvas of={messageStories.chatMessageSpinner} /> -<Controls of={messageStories.chatMessageSpinner} /> - -#### Image message content +##### Image inbound message content <Canvas of={messageStories.chatMessageImage} /> <Controls of={messageStories.chatMessageImage} /> +#### Outbound message + +Use the <Tag name={chatMessageOutboundTag} /> element to display content in an outbound message. + +##### Text outbound message content + +<Canvas of={messageStories.chatMessageText} /> +<Controls of={messageStories.chatMessageText} /> + +#### System message + +Use the <Tag name={chatMessageSystemTag} /> element to display content in a system message. + +##### Spinner system message content + +<Canvas of={messageStories.chatMessageSpinner} /> +<Controls of={messageStories.chatMessageSpinner} /> + ### Chat input Use the <Tag name={chatInputTag} /> element to allow the user to create and send diff --git a/packages/storybook/src/spright/chat/conversation/chat-conversation.stories.ts b/packages/storybook/src/spright/chat/conversation/chat-conversation.stories.ts index 7eca6ccccf..c6e70e78b0 100644 --- a/packages/storybook/src/spright/chat/conversation/chat-conversation.stories.ts +++ b/packages/storybook/src/spright/chat/conversation/chat-conversation.stories.ts @@ -14,8 +14,9 @@ import { chatInputTag } from '@ni/spright-components/dist/esm/chat/input'; import type { ChatInputSendEventDetail } from '@ni/spright-components/dist/esm/chat/input/types'; -import { ChatMessageType } from '@ni/spright-components/dist/esm/chat/message/types'; -import { chatMessageTag } from '@ni/spright-components/dist/esm/chat/message'; +import { chatMessageInboundTag } from '@ni/spright-components/dist/esm/chat/message/inbound'; +import { chatMessageOutboundTag } from '@ni/spright-components/dist/esm/chat/message/outbound'; +import { chatMessageSystemTag } from '@ni/spright-components/dist/esm/chat/message/system'; import { richTextViewerTag } from '@ni/nimble-components/dist/esm/rich-text/viewer'; import { spinnerTag } from '@ni/nimble-components/dist/esm/spinner'; import { iconCopyTextTag } from '@ni/nimble-components/dist/esm/icons/copy-text'; @@ -59,22 +60,22 @@ export const chatConversation: StoryObj<ChatConversationArgs> = { } </style> <${chatConversationTag} ${ref('conversationRef')} appearance="${x => x.appearance}"> - <${chatMessageTag} message-type="${() => ChatMessageType.system}"> + <${chatMessageSystemTag}> To start, press any key. - </${chatMessageTag}> - <${chatMessageTag} message-type="${() => ChatMessageType.outbound}"> + </${chatMessageSystemTag}> + <${chatMessageOutboundTag}> Where is the Any key? - </${chatMessageTag}> - <${chatMessageTag} message-type="${() => ChatMessageType.outbound}"> + </${chatMessageOutboundTag}> + <${chatMessageOutboundTag}> <${richTextViewerTag} markdown="${() => markdownExample}"></${richTextViewerTag}> - </${chatMessageTag}> - <${chatMessageTag} message-type="${() => ChatMessageType.system}"> + </${chatMessageOutboundTag}> + <${chatMessageSystemTag}> <${spinnerTag} style="${isChromatic() ? '--ni-private-spinner-animation-play-state:paused' : ''}" appearance="${() => SpinnerAppearance.accent}" ></${spinnerTag}> - </${chatMessageTag}> - <${chatMessageTag} message-type="${() => ChatMessageType.inbound}"> + </${chatMessageSystemTag}> + <${chatMessageInboundTag}> <${buttonTag} slot='footer-actions' appearance='ghost' title='Copy' content-hidden> <${iconCopyTextTag} slot='start'></${iconCopyTextTag}> Copy @@ -107,7 +108,7 @@ export const chatConversation: StoryObj<ChatConversationArgs> = { <${buttonTag} slot='end' appearance='block'> Check core temperature </${buttonTag}> - </${chatMessageTag}> + </${chatMessageInboundTag}> ${when(x => x.input, html<ChatConversationArgs, ChatInput>` <${chatInputTag} slot='input' placeholder='Type a message' send-button-label='Send' @send="${(x2, c2) => x2.sendMessage(c2.event as CustomEvent<ChatInputSendEventDetail>, x2.conversationRef)}" @@ -140,8 +141,7 @@ export const chatConversation: StoryObj<ChatConversationArgs> = { appearance: 'default', input: true, sendMessage: (event, conversationRef) => { - const message = document.createElement(chatMessageTag); - message.messageType = ChatMessageType.outbound; + const message = document.createElement(chatMessageOutboundTag); const span = document.createElement('span'); span.textContent = event.detail.text; // Preserves new lines and trailing spaces that the user entered diff --git a/packages/storybook/src/spright/chat/message/chat-message-matrix.stories.ts b/packages/storybook/src/spright/chat/message/chat-message-matrix.stories.ts index 8c23b7c650..06fc7a851f 100644 --- a/packages/storybook/src/spright/chat/message/chat-message-matrix.stories.ts +++ b/packages/storybook/src/spright/chat/message/chat-message-matrix.stories.ts @@ -1,6 +1,9 @@ import type { StoryFn, Meta } from '@storybook/html-vite'; import { html } from '@ni/fast-element'; import { chatMessageTag } from '@ni/spright-components/dist/esm/chat/message'; +import { chatMessageInboundTag } from '@ni/spright-components/dist/esm/chat/message/inbound'; +import { chatMessageOutboundTag } from '@ni/spright-components/dist/esm/chat/message/outbound'; +import { chatMessageSystemTag } from '@ni/spright-components/dist/esm/chat/message/system'; import { sharedMatrixParameters, createMatrixThemeStory @@ -18,14 +21,50 @@ const metadata: Meta = { export default metadata; -export const hidden: StoryFn = createStory( +export const messageHidden: StoryFn = createStory( hiddenWrapper( html`<${chatMessageTag} hidden>Hidden Chat Message</${chatMessageTag}>` ) ); -export const textCustomized: StoryFn = createMatrixThemeStory( +export const messageTextCustomized: StoryFn = createMatrixThemeStory( textCustomizationWrapper( html`<${chatMessageTag}>Message</${chatMessageTag}>` ) ); + +export const messageInboundHidden: StoryFn = createStory( + hiddenWrapper( + html`<${chatMessageInboundTag} hidden>Hidden Chat Inbound Message</${chatMessageInboundTag}>` + ) +); + +export const messageInboundTextCustomized: StoryFn = createMatrixThemeStory( + textCustomizationWrapper( + html`<${chatMessageInboundTag}>Inbound Message</${chatMessageInboundTag}>` + ) +); + +export const messageOutboundHidden: StoryFn = createStory( + hiddenWrapper( + html`<${chatMessageOutboundTag} hidden>Hidden Chat Outbound Message</${chatMessageOutboundTag}>` + ) +); + +export const messageOutboundTextCustomized: StoryFn = createMatrixThemeStory( + textCustomizationWrapper( + html`<${chatMessageOutboundTag}>Outbound Message</${chatMessageOutboundTag}>` + ) +); + +export const messageSystemHidden: StoryFn = createStory( + hiddenWrapper( + html`<${chatMessageSystemTag} hidden>Hidden Chat System Message</${chatMessageSystemTag}>` + ) +); + +export const messageSystemTextCustomized: StoryFn = createMatrixThemeStory( + textCustomizationWrapper( + html`<${chatMessageSystemTag}>System Message</${chatMessageSystemTag}>` + ) +); diff --git a/packages/storybook/src/spright/chat/message/chat-message.stories.ts b/packages/storybook/src/spright/chat/message/chat-message.stories.ts index f3731c8458..8a14638643 100644 --- a/packages/storybook/src/spright/chat/message/chat-message.stories.ts +++ b/packages/storybook/src/spright/chat/message/chat-message.stories.ts @@ -2,8 +2,9 @@ import { html, when } from '@ni/fast-element'; import type { Meta, StoryObj } from '@storybook/html-vite'; import { buttonTag } from '@ni/nimble-components/dist/esm/button'; -import { chatMessageTag } from '@ni/spright-components/dist/esm/chat/message'; -import { ChatMessageType } from '@ni/spright-components/dist/esm/chat/message/types'; +import { chatMessageInboundTag } from '@ni/spright-components/dist/esm/chat/message/inbound'; +import { chatMessageOutboundTag } from '@ni/spright-components/dist/esm/chat/message/outbound'; +import { chatMessageSystemTag } from '@ni/spright-components/dist/esm/chat/message/system'; import { richTextViewerTag } from '@ni/nimble-components/dist/esm/rich-text/viewer'; import { spinnerTag } from '@ni/nimble-components/dist/esm/spinner'; import { SpinnerAppearance } from '@ni/nimble-components/dist/esm/spinner/types'; @@ -26,22 +27,14 @@ Nimble will set the height of the buttons to \`$ni-nimble-control-slim-height\`. const endButtonDescription = 'Place 0 or more buttons with text. They appear below any action buttons. End buttons should only be added to inbound messages.'; -interface ChatMessageArgs { - messageType: keyof typeof ChatMessageType; +interface ChatMessageInboundArgs { footerActions: boolean; endButtons: boolean; } -const metadata: Meta<ChatMessageArgs> = { +const metadata: Meta<ChatMessageInboundArgs> = { title: 'Internal/Chat Message', argTypes: { - messageType: { - name: 'message-type', - options: Object.keys(ChatMessageType), - control: { type: 'radio' }, - description: 'The type of the chat message.', - table: { category: apiCategory.attributes } - }, footerActions: { name: 'footer-actions', description: footerActionsDescription, @@ -60,33 +53,15 @@ const metadata: Meta<ChatMessageArgs> = { export default metadata; -interface ChatMessageTextArgs extends ChatMessageArgs { +interface ChatMessageTextArgs { text: string; } export const chatMessageText: StoryObj<ChatMessageTextArgs> = { render: createUserSelectedThemeStory(html` - <${chatMessageTag} message-type="${x => ChatMessageType[x.messageType]}"> + <${chatMessageOutboundTag}> ${x => x.text} - ${when(x => x.footerActions, html` - <${buttonTag} slot="footer-actions" appearance="ghost" title="Like" content-hidden> - <${iconThumbUpTag} slot="start"></${iconThumbUpTag}> - Like - </${buttonTag}> - <${buttonTag} slot="footer-actions" appearance="ghost" title="Dislike" content-hidden> - <${iconThumbDownTag} slot="start"></${iconThumbDownTag}> - Dislike - </${buttonTag}> - `)} - ${when(x => x.endButtons, html` - <${buttonTag} slot="end" appearance="block"> - Order a tab - </${buttonTag}> - <${buttonTag} slot="end" appearance="block"> - Check core temperature - </${buttonTag}> - `)} - </${chatMessageTag}> + </${chatMessageInboundTag}> `), argTypes: { text: { @@ -97,19 +72,16 @@ export const chatMessageText: StoryObj<ChatMessageTextArgs> = { }, args: { text: 'Aurora Borealis? At this time of year? At this time of day? In this part of the country? Localized entirely within your kitchen?', - messageType: 'outbound', - footerActions: false, - endButtons: false } }; -interface ChatMessageRichTextArgs extends ChatMessageArgs { +interface ChatMessageRichTextArgs extends ChatMessageInboundArgs { markdown: string; } export const chatMessageRichText: StoryObj<ChatMessageRichTextArgs> = { render: createUserSelectedThemeStory(html` - <${chatMessageTag} message-type="${x => ChatMessageType[x.messageType]}"> + <${chatMessageInboundTag}> <${richTextViewerTag} markdown="${x => x.markdown}"></${richTextViewerTag}> ${when(x => x.footerActions, html` <${buttonTag} slot="footer-actions" appearance="ghost" title="Like" content-hidden> @@ -129,7 +101,7 @@ export const chatMessageRichText: StoryObj<ChatMessageRichTextArgs> = { Check core temperature </${buttonTag}> `)} - </${chatMessageTag}> + </${chatMessageInboundTag}> `), argTypes: { markdown: { @@ -139,49 +111,25 @@ export const chatMessageRichText: StoryObj<ChatMessageRichTextArgs> = { }, args: { markdown: markdownExample, - messageType: 'outbound', footerActions: false, endButtons: false } }; -export const chatMessageSpinner: StoryObj<ChatMessageArgs> = { +export const chatMessageSpinner: StoryObj = { render: createUserSelectedThemeStory(html` - <${chatMessageTag} message-type="${x => ChatMessageType[x.messageType]}"> + <${chatMessageSystemTag}> <${spinnerTag} style="${isChromatic() ? '--ni-private-spinner-animation-play-state:paused' : ''}" appearance="${() => SpinnerAppearance.accent}" ></${spinnerTag}> - ${when(x => x.footerActions, html` - <${buttonTag} slot="footer-actions" appearance="ghost" title="Like" content-hidden> - <${iconThumbUpTag} slot="start"></${iconThumbUpTag}> - Like - </${buttonTag}> - <${buttonTag} slot="footer-actions" appearance="ghost" title="Dislike" content-hidden> - <${iconThumbDownTag} slot="start"></${iconThumbDownTag}> - Dislike - </${buttonTag}> - `)} - ${when(x => x.endButtons, html` - <${buttonTag} slot="end" appearance="block"> - Order a tab - </${buttonTag}> - <${buttonTag} slot="end" appearance="block"> - Check core temperature - </${buttonTag}> - `)} - </${chatMessageTag}> - `), - args: { - messageType: 'system', - footerActions: false, - endButtons: false - } + </${chatMessageSystemTag}> + `) }; -export const chatMessageImage: StoryObj<ChatMessageArgs> = { +export const chatMessageImage: StoryObj<ChatMessageInboundArgs> = { render: createUserSelectedThemeStory(html` - <${chatMessageTag} message-type="${x => ChatMessageType[x.messageType]}"> + <${chatMessageInboundTag}> <img width="100" height="100" :src="${() => imgBlobUrl}"> ${when(x => x.footerActions, html` <${buttonTag} slot="footer-actions" appearance="ghost" title="Like" content-hidden> @@ -201,10 +149,9 @@ export const chatMessageImage: StoryObj<ChatMessageArgs> = { Check core temperature </${buttonTag}> `)} - </${chatMessageTag}> + </${chatMessageInboundTag}> `), args: { - messageType: 'inbound', footerActions: false, endButtons: false }