diff --git a/__tests__/__image_snapshots__/html/add-component-html-html-2-middleware-send-box-polymiddleware-add-component-html-1-snap.png b/__tests__/__image_snapshots__/html/add-component-html-html-2-middleware-send-box-polymiddleware-add-component-html-1-snap.png new file mode 100644 index 0000000000..c22dbf469d Binary files /dev/null and b/__tests__/__image_snapshots__/html/add-component-html-html-2-middleware-send-box-polymiddleware-add-component-html-1-snap.png differ diff --git a/__tests__/__image_snapshots__/html/legacy-add-component-html-html-2-middleware-send-box-legacy-send-box-middleware-legacy-add-component-html-1-snap.png b/__tests__/__image_snapshots__/html/legacy-add-component-html-html-2-middleware-send-box-legacy-send-box-middleware-legacy-add-component-html-1-snap.png new file mode 100644 index 0000000000..c22dbf469d Binary files /dev/null and b/__tests__/__image_snapshots__/html/legacy-add-component-html-html-2-middleware-send-box-legacy-send-box-middleware-legacy-add-component-html-1-snap.png differ diff --git a/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/add.html b/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/add.html new file mode 100644 index 0000000000..977a620e6f --- /dev/null +++ b/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/add.html @@ -0,0 +1,59 @@ + + + + + + + + + + + +
+ + + diff --git a/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/add.html.snap-1.png b/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/add.html.snap-1.png new file mode 100644 index 0000000000..3c10d7b821 Binary files /dev/null and b/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/add.html.snap-1.png differ diff --git a/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/change.html b/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/change.html new file mode 100644 index 0000000000..98d6d46ee8 --- /dev/null +++ b/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/change.html @@ -0,0 +1,56 @@ + + + + + + + + + + + +
+ + + diff --git a/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/change.html.snap-1.png b/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/change.html.snap-1.png new file mode 100644 index 0000000000..3c10d7b821 Binary files /dev/null and b/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/change.html.snap-1.png differ diff --git a/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/decorate.html b/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/decorate.html new file mode 100644 index 0000000000..5e2d80519f --- /dev/null +++ b/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/decorate.html @@ -0,0 +1,54 @@ + + + + + + + + + + + +
+ + + diff --git a/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/decorate.html.snap-1.png b/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/decorate.html.snap-1.png new file mode 100644 index 0000000000..3c10d7b821 Binary files /dev/null and b/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/decorate.html.snap-1.png differ diff --git a/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/legacyAddComponent.html b/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/legacyAddComponent.html new file mode 100644 index 0000000000..1c368260f7 --- /dev/null +++ b/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/legacyAddComponent.html @@ -0,0 +1,54 @@ + + + + + + + + + + + +
+ + + diff --git a/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/legacyAddComponent.html.snap-1.png b/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/legacyAddComponent.html.snap-1.png new file mode 100644 index 0000000000..3c10d7b821 Binary files /dev/null and b/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/legacyAddComponent.html.snap-1.png differ diff --git a/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/remove.html b/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/remove.html new file mode 100644 index 0000000000..c0ee76c182 --- /dev/null +++ b/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/remove.html @@ -0,0 +1,52 @@ + + + + + + + + + + + +
+ + + diff --git a/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/remove.html.snap-1.png b/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/remove.html.snap-1.png new file mode 100644 index 0000000000..3c10d7b821 Binary files /dev/null and b/__tests__/html2/middleware/sendBox/legacySendBoxMiddleware/remove.html.snap-1.png differ diff --git a/__tests__/html2/middleware/sendBox/polymiddleware/add.html b/__tests__/html2/middleware/sendBox/polymiddleware/add.html new file mode 100644 index 0000000000..2bf07947ef --- /dev/null +++ b/__tests__/html2/middleware/sendBox/polymiddleware/add.html @@ -0,0 +1,60 @@ + + + + + + + + + + + +
+ + + diff --git a/__tests__/html2/middleware/sendBox/polymiddleware/add.html.snap-1.png b/__tests__/html2/middleware/sendBox/polymiddleware/add.html.snap-1.png new file mode 100644 index 0000000000..26314f3085 Binary files /dev/null and b/__tests__/html2/middleware/sendBox/polymiddleware/add.html.snap-1.png differ diff --git a/__tests__/html2/middleware/sendBox/polymiddleware/addComponent.html b/__tests__/html2/middleware/sendBox/polymiddleware/addComponent.html new file mode 100644 index 0000000000..df4a674a7c --- /dev/null +++ b/__tests__/html2/middleware/sendBox/polymiddleware/addComponent.html @@ -0,0 +1,53 @@ + + + + + + + + + + + +
+ + + diff --git a/__tests__/html2/middleware/sendBox/polymiddleware/addComponent.html.snap-1.png b/__tests__/html2/middleware/sendBox/polymiddleware/addComponent.html.snap-1.png new file mode 100644 index 0000000000..f3a2db73a6 Binary files /dev/null and b/__tests__/html2/middleware/sendBox/polymiddleware/addComponent.html.snap-1.png differ diff --git a/__tests__/html2/middleware/sendBox/polymiddleware/change.html b/__tests__/html2/middleware/sendBox/polymiddleware/change.html new file mode 100644 index 0000000000..3b594755a3 --- /dev/null +++ b/__tests__/html2/middleware/sendBox/polymiddleware/change.html @@ -0,0 +1,56 @@ + + + + + + + + + + + +
+ + + diff --git a/__tests__/html2/middleware/sendBox/polymiddleware/change.html.snap-1.png b/__tests__/html2/middleware/sendBox/polymiddleware/change.html.snap-1.png new file mode 100644 index 0000000000..d4b726c9a8 Binary files /dev/null and b/__tests__/html2/middleware/sendBox/polymiddleware/change.html.snap-1.png differ diff --git a/__tests__/html2/middleware/sendBox/polymiddleware/decorate.html b/__tests__/html2/middleware/sendBox/polymiddleware/decorate.html new file mode 100644 index 0000000000..2e45df6503 --- /dev/null +++ b/__tests__/html2/middleware/sendBox/polymiddleware/decorate.html @@ -0,0 +1,59 @@ + + + + + + + + + + + +
+ + + diff --git a/__tests__/html2/middleware/sendBox/polymiddleware/decorate.html.snap-1.png b/__tests__/html2/middleware/sendBox/polymiddleware/decorate.html.snap-1.png new file mode 100644 index 0000000000..d61084c39c Binary files /dev/null and b/__tests__/html2/middleware/sendBox/polymiddleware/decorate.html.snap-1.png differ diff --git a/__tests__/html2/middleware/sendBox/polymiddleware/remove.html b/__tests__/html2/middleware/sendBox/polymiddleware/remove.html new file mode 100644 index 0000000000..519af8fee6 --- /dev/null +++ b/__tests__/html2/middleware/sendBox/polymiddleware/remove.html @@ -0,0 +1,54 @@ + + + + + + + + + + + +
+ + + diff --git a/__tests__/html2/middleware/sendBox/polymiddleware/remove.html.snap-1.png b/__tests__/html2/middleware/sendBox/polymiddleware/remove.html.snap-1.png new file mode 100644 index 0000000000..3c10d7b821 Binary files /dev/null and b/__tests__/html2/middleware/sendBox/polymiddleware/remove.html.snap-1.png differ diff --git a/__tests__/html2/middleware/sendBox/polymiddleware/simple.html b/__tests__/html2/middleware/sendBox/polymiddleware/simple.html new file mode 100644 index 0000000000..f2cfdd2f13 --- /dev/null +++ b/__tests__/html2/middleware/sendBox/polymiddleware/simple.html @@ -0,0 +1,60 @@ + + + + + + + + + + + +
+ + + diff --git a/__tests__/html2/middleware/sendBox/polymiddleware/simple.html.snap-1.png b/__tests__/html2/middleware/sendBox/polymiddleware/simple.html.snap-1.png new file mode 100644 index 0000000000..d61084c39c Binary files /dev/null and b/__tests__/html2/middleware/sendBox/polymiddleware/simple.html.snap-1.png differ diff --git a/package-lock.json b/package-lock.json index d47ce3fe61..dbad523745 100644 --- a/package-lock.json +++ b/package-lock.json @@ -336,7 +336,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "devOptional": true, - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -3304,7 +3303,6 @@ "version": "29.7.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", @@ -3342,7 +3340,6 @@ "version": "29.7.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", @@ -3632,7 +3629,6 @@ "version": "29.6.3", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -5231,7 +5227,6 @@ "version": "16.14.68", "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.68.tgz", "integrity": "sha512-GEe60JEJg7wIvnUzXBX/A++ieyum98WXF/q2oFr1RVar8OK8JxU/uEYBXgv7jF87SoaDdxtAq3KUaJFlu02ziw==", - "peer": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "^0.16", @@ -5242,7 +5237,6 @@ "version": "16.9.25", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.25.tgz", "integrity": "sha512-ZK//eAPhwft9Ul2/Zj+6O11YR6L4JX0J2sVeBC9Ft7x7HFN7xk7yUV/zDxqV6rjvqgl6r8Dq7oQImxtyf/Mzcw==", - "peer": true, "peerDependencies": { "@types/react": "^16.0.0" } @@ -5384,7 +5378,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.50.0.tgz", "integrity": "sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==", "dev": true, - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.50.0", "@typescript-eslint/types": "8.50.0", @@ -5815,7 +5808,6 @@ "version": "8.15.0", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -6210,7 +6202,6 @@ "node_modules/asn1.js": { "version": "5.4.1", "license": "MIT", - "peer": true, "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -6285,7 +6276,8 @@ "node_modules/asynckit": { "version": "0.4.0", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/available-typed-arrays": { "version": "1.0.7", @@ -6314,6 +6306,7 @@ "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", "dev": true, + "peer": true, "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", @@ -6908,7 +6901,6 @@ "url": "https://github.com/sponsors/ai" } ], - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -6957,6 +6949,7 @@ "version": "0.2.13", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "*" } @@ -7282,6 +7275,7 @@ "url": "https://github.com/rxaviers/cldr-data-npm/blob/master/LICENSE" } ], + "peer": true, "dependencies": { "cldr-data-downloader": "1.1.0", "glob": "10.3.12" @@ -7290,6 +7284,7 @@ "node_modules/cldr-data-downloader": { "version": "1.1.0", "dev": true, + "peer": true, "dependencies": { "axios": "^1.7.2", "mkdirp": "^1.0.4", @@ -7304,12 +7299,14 @@ "node_modules/cldr-data-downloader/node_modules/abbrev": { "version": "1.1.1", "dev": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/cldr-data-downloader/node_modules/nopt": { "version": "3.0.6", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "abbrev": "1" }, @@ -7321,6 +7318,7 @@ "version": "1.0.1", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" @@ -7330,6 +7328,7 @@ "version": "10.3.12", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.6", @@ -7351,6 +7350,7 @@ "version": "2.3.6", "dev": true, "license": "BlueOak-1.0.0", + "peer": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -7369,6 +7369,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "peer": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -7570,6 +7571,7 @@ "version": "1.0.8", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -7823,7 +7825,6 @@ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.47.0.tgz", "integrity": "sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw==", "hasInstallScript": true, - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -8189,6 +8190,7 @@ "version": "1.0.0", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.4.0" } @@ -8737,7 +8739,6 @@ "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", "dev": true, "hasInstallScript": true, - "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -8803,7 +8804,6 @@ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -8859,7 +8859,6 @@ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, - "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -9789,6 +9788,7 @@ "version": "1.1.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "pend": "~1.2.0" } @@ -9965,6 +9965,7 @@ "version": "4.0.4", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -10254,7 +10255,6 @@ "version": "1.7.1", "resolved": "https://registry.npmjs.org/globalize/-/globalize-1.7.1.tgz", "integrity": "sha512-PFymRL0PtitFOlSniuwwwNfkooi3cLQJo9Uke1+j1DsGfUkkHkwneImqVtGcqKI0TuzhAlHt7hAcgK324902HA==", - "peer": true, "dependencies": { "cldrjs": "^0.5.4" } @@ -10496,7 +10496,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/handler-chain/-/handler-chain-0.1.1.tgz", "integrity": "sha512-5eo8F9UTUiFCMtDUF1ipva1tvOCGE+vFr33aFHSISjTqXfGywCRV2aE6TzPkMhaw1pArOv3wv2Wz3Rh+AJJ8bA==", - "peer": true, "dependencies": { "handler-chain": "^0.1.1" } @@ -10911,8 +10910,7 @@ "version": "2019.1.0", "resolved": "https://registry.npmjs.org/iana-tz-data/-/iana-tz-data-2019.1.0.tgz", "integrity": "sha512-T7+26Skkyxqjp4mg20/O065j9J5qP39nWVQj/2ArxQ0gSPkL+T9lwerRmiOAzFRNsNXepX45QqchqTVENwNvig==", - "dev": true, - "peer": true + "dev": true }, "node_modules/iconv-lite": { "version": "0.6.3", @@ -11769,7 +11767,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/iter-fest/-/iter-fest-0.3.0.tgz", "integrity": "sha512-t76cnHCl9MEZRaUb0VBwTXP8dWjxbcTYm91VGWfQYjSMXKkjdOAIjUsaMYuLIy9jxk9fT55XIlb4Y/HACK/zlw==", - "peer": true, "dependencies": { "iter-fest": "^0.3.0" }, @@ -12744,7 +12741,6 @@ "version": "29.7.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -13126,7 +13122,6 @@ "version": "29.7.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -14925,7 +14920,6 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/microsoft-cognitiveservices-speech-sdk/-/microsoft-cognitiveservices-speech-sdk-1.17.0.tgz", "integrity": "sha512-RVUCpTeu1g+R4HB/PaLQmEfsdHzwEa6+2phgCiPA4lGIiR7ILEL7qZHHUWAG6W4zcjnWeiLnL7tVgMbyd5XGgA==", - "peer": true, "dependencies": { "agent-base": "^6.0.1", "asn1.js-rfc2560": "^5.0.1", @@ -15128,6 +15122,7 @@ "version": "1.0.4", "dev": true, "license": "MIT", + "peer": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -15306,7 +15301,6 @@ "version": "8.0.2", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "growly": "^1.3.0", "is-wsl": "^2.2.0", @@ -15841,7 +15835,8 @@ "node_modules/pend": { "version": "1.2.0", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/picocolors": { "version": "1.1.1", @@ -15976,7 +15971,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.1.0", @@ -16098,7 +16092,6 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", "dev": true, - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -16207,7 +16200,8 @@ "node_modules/proxy-from-env": { "version": "1.1.0", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/prr": { "version": "1.0.1", @@ -16373,7 +16367,6 @@ "version": "16.8.6", "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -16388,7 +16381,6 @@ "version": "0.4.2", "resolved": "https://registry.npmjs.org/react-chain-of-responsibility/-/react-chain-of-responsibility-0.4.2.tgz", "integrity": "sha512-khBaWO1rSLSUw6Ydr3lYFgONwmrx9rSOClrLCyn7cq40QxVJSh5utq1rbey+Pr24trWmQdC9qweTuKG2RptTXw==", - "peer": true, "dependencies": { "handler-chain": "^0.1.0", "react-chain-of-responsibility": "^0.4.2", @@ -16416,7 +16408,6 @@ "version": "16.8.6", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz", "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -16801,8 +16792,7 @@ "node_modules/redux": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", - "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", - "peer": true + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==" }, "node_modules/redux-saga": { "version": "1.4.2", @@ -17136,7 +17126,6 @@ "version": "4.46.2", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -17440,7 +17429,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -18908,7 +18896,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, - "peer": true, "engines": { "node": ">=12" }, @@ -19326,7 +19313,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -19748,7 +19734,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/use-ref-from/-/use-ref-from-0.1.0.tgz", "integrity": "sha512-PRjmfhUGUKghhOjKV1dBU66M7CASdb4NkMsaaWLdJA81yOZFlVL7Pi3O9aD+68pRh0VrRQjZfS6Ux3vPy1VhRg==", - "peer": true, "dependencies": { "@babel/runtime-corejs3": "^7.24.1", "use-ref-from": "^0.1.0" @@ -19783,7 +19768,6 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "peer": true, "bin": { "uuid": "dist/bin/uuid" } @@ -19805,7 +19789,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.2.0.tgz", "integrity": "sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==", - "peer": true, "peerDependencies": { "typescript": ">=5" }, @@ -19911,7 +19894,6 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz", "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==", "dev": true, - "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -19960,7 +19942,6 @@ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", "dev": true, - "peer": true, "dependencies": { "@discoveryjs/json-ext": "^0.6.1", "@webpack-cli/configtest": "^3.0.1", @@ -20492,6 +20473,7 @@ "version": "2.10.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -20513,7 +20495,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.2.1.tgz", "integrity": "sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==", "dev": true, - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -21824,7 +21805,6 @@ "react": "^18.3.1", "react-dom": "^18.3.1" }, - "devDependencies": {}, "engines": { "node": ">= 14.0.0" } @@ -21922,7 +21902,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -21935,7 +21914,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" diff --git a/packages/api-middleware/src/PolymiddlewareComposer.tsx b/packages/api-middleware/src/PolymiddlewareComposer.tsx index 4780e3fc86..7c079ad469 100644 --- a/packages/api-middleware/src/PolymiddlewareComposer.tsx +++ b/packages/api-middleware/src/PolymiddlewareComposer.tsx @@ -16,6 +16,7 @@ import { import { ActivityPolymiddlewareProvider, extractActivityEnhancer } from './activityPolymiddleware'; import { ErrorBoxPolymiddlewareProvider, extractErrorBoxEnhancer } from './errorBoxPolymiddleware'; +import { extractSendBoxEnhancer, SendBoxPolymiddlewareProvider } from './sendBoxPolymiddleware'; import { Polymiddleware } from './types/Polymiddleware'; const polymiddlewareComposerPropsSchema = pipe( @@ -64,6 +65,21 @@ function PolymiddlewareComposer(props: PolymiddlewareComposerProps) { const errorBoxPolymiddleware = useMemo(() => errorBoxEnhancers.map(enhancer => () => enhancer), [errorBoxEnhancers]); + const sendBoxEnhancers = useMemoWithPrevious>( + (prevSendBoxEnhancers = []) => { + const sendBoxEnhancers = extractSendBoxEnhancer(polymiddleware); + + // Checks for array equality, return previous version if nothing has changed. + return prevSendBoxEnhancers.length === sendBoxEnhancers.length && + sendBoxEnhancers.every((middleware, index) => Object.is(middleware, prevSendBoxEnhancers.at(index))) + ? prevSendBoxEnhancers + : sendBoxEnhancers; + }, + [polymiddleware] + ); + + const sendBoxPolymiddleware = useMemo(() => sendBoxEnhancers.map(enhancer => () => enhancer), [sendBoxEnhancers]); + // Didn't thoroughly think through this part yet, but I am using the first approach for now: // 1. for every type of middleware @@ -75,7 +91,9 @@ function PolymiddlewareComposer(props: PolymiddlewareComposerProps) { return ( - {children} + + {children} + ); } diff --git a/packages/api-middleware/src/index.ts b/packages/api-middleware/src/index.ts index 9e0a8aeb8e..1a306a6b63 100644 --- a/packages/api-middleware/src/index.ts +++ b/packages/api-middleware/src/index.ts @@ -26,6 +26,20 @@ export { type ErrorBoxPolymiddlewareRequest } from './errorBoxPolymiddleware'; +export { + createSendBoxPolymiddleware, + sendBoxComponent, + SendBoxPolymiddlewareProxy, + useBuildRenderSendBoxCallback, + type SendBoxPolymiddleware, + type SendBoxPolymiddlewareHandler, + type SendBoxPolymiddlewareHandlerResult, + type SendBoxPolymiddlewareProps, + type SendBoxPolymiddlewareProxyProps, + type SendBoxPolymiddlewareRenderer, + type SendBoxPolymiddlewareRequest +} from './sendBoxPolymiddleware'; + // TODO: [P0] Add tests for nesting `polymiddleware`. export { default as PolymiddlewareComposer } from './PolymiddlewareComposer'; export { type Polymiddleware } from './types/Polymiddleware'; diff --git a/packages/api-middleware/src/legacy.ts b/packages/api-middleware/src/legacy.ts index c9405239c4..c602687b97 100644 --- a/packages/api-middleware/src/legacy.ts +++ b/packages/api-middleware/src/legacy.ts @@ -6,3 +6,10 @@ export { } from './legacy/activityMiddleware'; export { type LegacyAttachmentMiddleware, type LegacyRenderAttachment } from './legacy/attachmentMiddleware'; + +export { + type LegacySendBoxComponentFactory, + type LegacySendBoxMiddleware, + type LegacySendBoxProps, + type LegacySendBoxRenderer +} from './legacy/sendBoxMiddleware'; diff --git a/packages/api-middleware/src/legacy/sendBoxMiddleware.ts b/packages/api-middleware/src/legacy/sendBoxMiddleware.ts new file mode 100644 index 0000000000..e60d7b156f --- /dev/null +++ b/packages/api-middleware/src/legacy/sendBoxMiddleware.ts @@ -0,0 +1,40 @@ +import { type ComponentType, type ReactNode } from 'react'; + +/** + * @deprecated Legacy sendBox middleware is being deprecated and will be removed on or after 2027-08-16. + */ +type LegacySendBoxProps = { + readonly className?: string | undefined; +}; + +/** + * @deprecated Legacy sendBox middleware is being deprecated and will be removed on or after 2027-08-16. + */ +type LegacySendBoxComponent = (props: LegacySendBoxProps) => Exclude; + +/** + * @deprecated Legacy sendBox middleware is being deprecated and will be removed on or after 2027-08-16. + */ +type LegacySendBoxRenderer = () => LegacySendBoxComponent; + +/** + * @deprecated Legacy sendBox middleware is being deprecated and will be removed on or after 2027-08-16. + */ +type LegacySendBoxComponentFactory = ComponentType; + +/** + * @deprecated Legacy sendBox middleware is being deprecated and will be removed on or after 2027-08-16. + */ +type LegacySendBoxEnhancer = (next: LegacySendBoxRenderer) => LegacySendBoxRenderer; + +/** + * @deprecated Legacy sendBox middleware is being deprecated and will be removed on or after 2027-08-16. + */ +type LegacySendBoxMiddleware = () => LegacySendBoxEnhancer; + +export { + type LegacySendBoxComponentFactory, + type LegacySendBoxMiddleware, + type LegacySendBoxProps, + type LegacySendBoxRenderer +}; diff --git a/packages/api-middleware/src/sendBoxPolymiddleware.tsx b/packages/api-middleware/src/sendBoxPolymiddleware.tsx new file mode 100644 index 0000000000..4d19a77c1a --- /dev/null +++ b/packages/api-middleware/src/sendBoxPolymiddleware.tsx @@ -0,0 +1,82 @@ +import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; +import React, { memo, useMemo } from 'react'; +import { object, optional, pipe, readonly, string, type InferInput } from 'valibot'; + +import createErrorBoundaryMiddleware from './private/createErrorBoundaryMiddleware'; +import templatePolymiddleware, { + type InferHandler, + type InferHandlerResult, + type InferMiddleware, + type InferProps, + type InferProviderProps, + type InferRenderer, + type InferRequest +} from './private/templatePolymiddleware'; + +const { + createMiddleware: createSendBoxPolymiddleware, + extractEnhancer: extractSendBoxEnhancer, + Provider, + Proxy, + reactComponent: sendBoxComponent, + useBuildRenderCallback: useBuildRenderSendBoxCallback +} = templatePolymiddleware('sendBox'); + +type SendBoxPolymiddleware = InferMiddleware; +type SendBoxPolymiddlewareHandler = InferHandler; +type SendBoxPolymiddlewareHandlerResult = InferHandlerResult; +type SendBoxPolymiddlewareProps = InferProps; +type SendBoxPolymiddlewareRenderer = InferRenderer; +type SendBoxPolymiddlewareRequest = InferRequest; +type SendBoxPolymiddlewareProviderProps = InferProviderProps; + +const sendBoxPolymiddlewareProxyPropsSchema = pipe(object({ className: optional(string()) }), readonly()); + +type SendBoxPolymiddlewareProxyProps = Readonly>; + +// A friendlier version than the organic . +const SendBoxPolymiddlewareProxy = memo(function SendBoxPolymiddlewareProxy(props: SendBoxPolymiddlewareProxyProps) { + const { className } = validateProps(sendBoxPolymiddlewareProxyPropsSchema, props); + + const request = useMemo(() => undefined, []); + + return ; +}); + +const SendBoxPolymiddlewareProvider = memo(function SendBoxPolymiddlewareProvider({ + children, + middleware +}: SendBoxPolymiddlewareProviderProps) { + // Decorates middleware with . + const middlewareWithErrorBoundary = useMemo( + () => + Object.freeze([ + createErrorBoundaryMiddleware({ + createMiddleware: createSendBoxPolymiddleware, + reactComponent: sendBoxComponent, + where: 'send box polymiddleware' + }), + ...middleware + ]), + [middleware] + ); + + return {children}; +}); + +export { + createSendBoxPolymiddleware, + extractSendBoxEnhancer, + sendBoxComponent, + SendBoxPolymiddlewareProvider, + SendBoxPolymiddlewareProxy, + useBuildRenderSendBoxCallback, + type SendBoxPolymiddleware, + type SendBoxPolymiddlewareHandler, + type SendBoxPolymiddlewareHandlerResult, + type SendBoxPolymiddlewareProps, + type SendBoxPolymiddlewareProviderProps, + type SendBoxPolymiddlewareProxyProps, + type SendBoxPolymiddlewareRenderer, + type SendBoxPolymiddlewareRequest +}; diff --git a/packages/api-middleware/src/types/Polymiddleware.ts b/packages/api-middleware/src/types/Polymiddleware.ts index 729d27c87d..1eeb39bdae 100644 --- a/packages/api-middleware/src/types/Polymiddleware.ts +++ b/packages/api-middleware/src/types/Polymiddleware.ts @@ -1,4 +1,5 @@ import { type ActivityPolymiddleware } from '../activityPolymiddleware'; import { type ErrorBoxPolymiddleware } from '../errorBoxPolymiddleware'; +import { type SendBoxPolymiddleware } from '../sendBoxPolymiddleware'; -export type Polymiddleware = ActivityPolymiddleware | ErrorBoxPolymiddleware; +export type Polymiddleware = ActivityPolymiddleware | ErrorBoxPolymiddleware | SendBoxPolymiddleware; diff --git a/packages/api/src/boot/middleware.ts b/packages/api/src/boot/middleware.ts index 8d42eb1069..c83a8d7322 100644 --- a/packages/api/src/boot/middleware.ts +++ b/packages/api/src/boot/middleware.ts @@ -30,4 +30,20 @@ export { type ErrorBoxPolymiddlewareRequest } from '@msinternal/botframework-webchat-api-middleware'; +export { + createSendBoxPolymiddleware, + sendBoxComponent, + SendBoxPolymiddlewareProxy, + useBuildRenderSendBoxCallback, + type SendBoxPolymiddleware, + type SendBoxPolymiddlewareHandler, + type SendBoxPolymiddlewareHandlerResult, + type SendBoxPolymiddlewareProps, + type SendBoxPolymiddlewareProxyProps, + type SendBoxPolymiddlewareRenderer, + type SendBoxPolymiddlewareRequest +} from '@msinternal/botframework-webchat-api-middleware'; + export { default as createActivityPolymiddlewareFromLegacy } from '../legacy/createActivityPolymiddlewareFromLegacy'; + +export { default as createSendBoxPolymiddlewareFromLegacy } from '../legacy/createSendBoxPolymiddlewareFromLegacy'; diff --git a/packages/api/src/hooks/Composer.tsx b/packages/api/src/hooks/Composer.tsx index 3b1794d86b..a01c02fb21 100644 --- a/packages/api/src/hooks/Composer.tsx +++ b/packages/api/src/hooks/Composer.tsx @@ -50,8 +50,9 @@ import errorBoxTelemetryPolymiddleware from '../errorBox/errorBoxTelemetryPolymi import PrecompiledGlobalize from '../external/PrecompiledGlobalize'; import usePonyfill from '../hooks/usePonyfill'; import createActivityPolymiddlewareFromLegacy from '../legacy/createActivityPolymiddlewareFromLegacy'; +import createSendBoxPolymiddlewareFromLegacy from '../legacy/createSendBoxPolymiddlewareFromLegacy'; import getAllLocalizedStrings from '../localization/getAllLocalizedStrings'; -import { SendBoxMiddlewareProvider, type SendBoxMiddleware } from '../middleware/SendBoxMiddleware'; +import { type SendBoxMiddleware } from '../middleware/SendBoxMiddleware'; import { SendBoxToolbarMiddlewareProvider, type SendBoxToolbarMiddleware @@ -524,6 +525,11 @@ const ComposerCore = ({ [activityMiddleware] ); + const polymiddlewareForLegacySendBoxMiddleware = useMemo(() => { + const middleware = singleToArray(sendBoxMiddleware) as any[]; + return Object.freeze([createSendBoxPolymiddlewareFromLegacy(...middleware)]); + }, [sendBoxMiddleware]); + const polymiddleware = useMemo( () => Object.freeze([ @@ -532,9 +538,10 @@ const ComposerCore = ({ errorBoxTelemetryPolymiddleware, ...(polymiddlewareFromProps || []), ...polymiddlewareForLegacyActivityMiddleware, + ...polymiddlewareForLegacySendBoxMiddleware, activityFallbackPolymiddleware ]), - [polymiddlewareForLegacyActivityMiddleware, polymiddlewareFromProps] + [polymiddlewareForLegacyActivityMiddleware, polymiddlewareForLegacySendBoxMiddleware, polymiddlewareFromProps] ); /** @@ -615,18 +622,16 @@ const ComposerCore = ({ - - - - - - {typeof children === 'function' ? children(context) : children} - - - - - - + + + + + {typeof children === 'function' ? children(context) : children} + + + + + diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts index 2b2cff9478..84c3ad57d5 100644 --- a/packages/api/src/index.ts +++ b/packages/api/src/index.ts @@ -5,7 +5,11 @@ export type { LegacyActivityMiddleware as ActivityMiddleware, /** @deprecated Use `polymiddleware` instead, this will be removed on or after 2027-08-16. */ LegacyAttachmentMiddleware as AttachmentMiddleware, - LegacyRenderAttachment as RenderAttachment + LegacyRenderAttachment as RenderAttachment, + /** @deprecated Use `polymiddleware` instead, this will be removed on or after 2028-03-04. */ + LegacySendBoxComponentFactory as SendBoxComponentFactory, + /** @deprecated Use `polymiddleware` instead, this will be removed on or after 2028-03-04. */ + LegacySendBoxRenderer as SendBoxRenderer } from '@msinternal/botframework-webchat-api-middleware/legacy'; export * as hooks from './boot/hook'; diff --git a/packages/api/src/legacy/LegacySendBoxBridge.tsx b/packages/api/src/legacy/LegacySendBoxBridge.tsx new file mode 100644 index 0000000000..3df3dcee5d --- /dev/null +++ b/packages/api/src/legacy/LegacySendBoxBridge.tsx @@ -0,0 +1,25 @@ +import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; +import React, { Fragment, memo, useMemo } from 'react'; + +import { + legacySendBoxBridgeComponentPropsSchema, + type LegacySendBoxBridgeComponentProps +} from './createSendBoxPolymiddlewareFromLegacy'; + +/** + * This component is solely for `createSendBoxPolymiddlewareFromLegacy`. + * + * @param props Legacy sendBox middleware props, includes `className` and `render`. + * @returns A sendBox node rendered using the `props.render` function. + */ +function LegacySendBoxBridge(props: LegacySendBoxBridgeComponentProps) { + const { className, render } = validateProps(legacySendBoxBridgeComponentPropsSchema, props); + + const children = useMemo(() => render({ className }), [className, render]); + + return {children}; +} + +LegacySendBoxBridge.displayName = 'LegacySendBoxBridge'; + +export default memo(LegacySendBoxBridge); diff --git a/packages/api/src/legacy/createSendBoxPolymiddlewareFromLegacy.tsx b/packages/api/src/legacy/createSendBoxPolymiddlewareFromLegacy.tsx new file mode 100644 index 0000000000..0160fb236c --- /dev/null +++ b/packages/api/src/legacy/createSendBoxPolymiddlewareFromLegacy.tsx @@ -0,0 +1,71 @@ +import { + createSendBoxPolymiddleware, + sendBoxComponent, + type SendBoxPolymiddleware +} from '@msinternal/botframework-webchat-api-middleware'; +import { type LegacySendBoxMiddleware } from '@msinternal/botframework-webchat-api-middleware/legacy'; +import { composeEnhancer, type Enhancer } from 'handler-chain'; +import { type ReactNode } from 'react'; +import { + custom, + function_, + never, + object, + optional, + pipe, + readonly, + safeParse, + string, + type InferInput +} from 'valibot'; + +import LegacySendBoxBridge from './LegacySendBoxBridge'; + +type LegacySendBoxRenderFunction = (props: { readonly className?: string | undefined }) => ReactNode; +type LegacySendBoxComponent = ReactNode; + +const legacySendBoxBridgeComponentPropsSchema = pipe( + object({ + children: optional(never()), + className: optional(string()), + render: custom(value => safeParse(function_(), value).success) + }), + readonly() +); + +type LegacySendBoxBridgeComponentProps = Readonly< + InferInput & { children?: never } +>; + +/** + * Polyfill legacy sendBox middleware into a polymiddleware. + * + * @deprecated Legacy sendBox middleware is being deprecated and will be removed on or after 2028-03-04. + * @param middleware An array of legacy sendBox middleware. + * @returns A polymiddleware composed by legacy sendBox middleware. + */ +function createSendBoxPolymiddlewareFromLegacy( + ...middleware: readonly LegacySendBoxMiddleware[] +): SendBoxPolymiddleware { + const legacyEnhancer: Enhancer = composeEnhancer( + ...(middleware.map(middleware => middleware()) as Enhancer[]) + ); + + return createSendBoxPolymiddleware(next => { + const legacyHandler = legacyEnhancer(() => { + const handler = next(); + + return !!handler && (() => handler.render({})); + }); + + return () => { + const legacyResult = legacyHandler(); + + return legacyResult ? sendBoxComponent(LegacySendBoxBridge, { render: () => legacyResult }) : undefined; + }; + }); +} + +export default createSendBoxPolymiddlewareFromLegacy; + +export { legacySendBoxBridgeComponentPropsSchema, type LegacySendBoxBridgeComponentProps }; diff --git a/packages/api/src/middleware/SendBoxMiddleware.ts b/packages/api/src/middleware/SendBoxMiddleware.ts index 84deed5a48..d93981f0a9 100644 --- a/packages/api/src/middleware/SendBoxMiddleware.ts +++ b/packages/api/src/middleware/SendBoxMiddleware.ts @@ -4,6 +4,9 @@ import templateMiddleware, { type InferRequest } from './private/templateMiddleware'; +/** + * @deprecated Legacy send box middleware is being deprecated and will be removed on or after 2028-03-04. Use `createSendBoxPolymiddleware` instead. + */ const template = templateMiddleware('sendBoxMiddleware'); const { @@ -13,8 +16,19 @@ const { Proxy: SendBoxMiddlewareProxy } = template; +/** + * @deprecated Legacy send box middleware is being deprecated and will be removed on or after 2028-03-04 Use `SendBoxPolymiddleware` instead. + */ type SendBoxMiddleware = InferMiddleware; + +/** + * @deprecated Legacy send box middleware is being deprecated and will be removed on or after 2028-03-04. Use `SendBoxPolymiddlewareProps` instead. + */ type SendBoxMiddlewareProps = InferProps; + +/** + * @deprecated Legacy send box middleware is being deprecated and will be removed on or after 2028-03-04. Use `SendBoxPolymiddlewareRequest` instead. + */ type SendBoxMiddlewareRequest = InferRequest; export { diff --git a/packages/bundle/src/boot/actual/middleware.ts b/packages/bundle/src/boot/actual/middleware.ts index 9641816786..feefface3c 100644 --- a/packages/bundle/src/boot/actual/middleware.ts +++ b/packages/bundle/src/boot/actual/middleware.ts @@ -27,4 +27,19 @@ export { type ErrorBoxPolymiddlewareRequest } from 'botframework-webchat-api/middleware'; +export { + createSendBoxPolymiddleware, + sendBoxComponent, + SendBoxPolymiddlewareProxy, + useBuildRenderSendBoxCallback, + type SendBoxPolymiddleware, + type SendBoxPolymiddlewareHandler, + type SendBoxPolymiddlewareHandlerResult, + type SendBoxPolymiddlewareProps, + type SendBoxPolymiddlewareProxyProps, + type SendBoxPolymiddlewareRenderer, + type SendBoxPolymiddlewareRequest +} from 'botframework-webchat-api/middleware'; + export { createActivityPolymiddlewareFromLegacy } from 'botframework-webchat-api/middleware'; +export { createSendBoxPolymiddlewareFromLegacy } from 'botframework-webchat-api/middleware'; diff --git a/packages/component/src/BasicWebChat.tsx b/packages/component/src/BasicWebChat.tsx index f910c43d18..0e72d97dbe 100644 --- a/packages/component/src/BasicWebChat.tsx +++ b/packages/component/src/BasicWebChat.tsx @@ -2,7 +2,8 @@ /* eslint react/no-unsafe: off */ import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; -import { SendBoxMiddlewareProxy, hooks } from 'botframework-webchat-api'; +import { hooks } from 'botframework-webchat-api'; +import { SendBoxPolymiddlewareProxy } from 'botframework-webchat-api/middleware'; import classNames from 'classnames'; import React, { memo, useRef } from 'react'; import { object, optional, pipe, readonly, string, type InferInput } from 'valibot'; @@ -72,7 +73,7 @@ function BasicWebChat(props: BasicWebChatProps) { {!options.hideToaster && } - + ); } diff --git a/packages/test/test-assets/package.json b/packages/test/test-assets/package.json index 809aaa395c..231f0777fb 100644 --- a/packages/test/test-assets/package.json +++ b/packages/test/test-assets/package.json @@ -19,7 +19,7 @@ "eslint": "npm run precommit", "postversion": "../../../scripts/npm/postversion.sh", "preversion": "../../../scripts/npm/preversion.sh", - "start": "../../../scripts/npm/notify-build.sh \"out\"" + "start": "../../../scripts/npm/notify-build.sh \"src\"" }, "pinDependencies": {}, "localDependencies": {},