diff --git a/change-beta/@azure-communication-react-452e1c29-f562-491d-bd4a-7d9d58cb3778.json b/change-beta/@azure-communication-react-452e1c29-f562-491d-bd4a-7d9d58cb3778.json new file mode 100644 index 00000000000..2adb3f5758b --- /dev/null +++ b/change-beta/@azure-communication-react-452e1c29-f562-491d-bd4a-7d9d58cb3778.json @@ -0,0 +1,9 @@ +{ + "type": "patch", + "area": "fix", + "workstream": "A11y", + "comment": "Fix an issue where tab key was ignored by rich text editor at the end of the text", + "packageName": "@azure/communication-react", + "email": "98852890+vhuseinova-msft@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change-beta/@azure-communication-react-84f1f7b4-4854-4450-9214-b4b3ec9c47d5.json b/change-beta/@azure-communication-react-84f1f7b4-4854-4450-9214-b4b3ec9c47d5.json new file mode 100644 index 00000000000..fda60065df3 --- /dev/null +++ b/change-beta/@azure-communication-react-84f1f7b4-4854-4450-9214-b4b3ec9c47d5.json @@ -0,0 +1,9 @@ +{ + "type": "patch", + "area": "fix", + "workstream": "", + "comment": "Remove unreachable code", + "packageName": "@azure/communication-react", + "email": "77021369+jimchou-dev@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change-beta/@azure-communication-react-8f3f7c74-3500-4ecb-994e-9da8d77d415b.json b/change-beta/@azure-communication-react-8f3f7c74-3500-4ecb-994e-9da8d77d415b.json new file mode 100644 index 00000000000..266cbfc56a5 --- /dev/null +++ b/change-beta/@azure-communication-react-8f3f7c74-3500-4ecb-994e-9da8d77d415b.json @@ -0,0 +1,9 @@ +{ + "type": "patch", + "area": "improvement", + "workstream": "Hard mute", + "comment": "Add story book for Media access (hard mute) feature", + "packageName": "@azure/communication-react", + "email": "fuyan@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/@azure-communication-react-452e1c29-f562-491d-bd4a-7d9d58cb3778.json b/change/@azure-communication-react-452e1c29-f562-491d-bd4a-7d9d58cb3778.json new file mode 100644 index 00000000000..2adb3f5758b --- /dev/null +++ b/change/@azure-communication-react-452e1c29-f562-491d-bd4a-7d9d58cb3778.json @@ -0,0 +1,9 @@ +{ + "type": "patch", + "area": "fix", + "workstream": "A11y", + "comment": "Fix an issue where tab key was ignored by rich text editor at the end of the text", + "packageName": "@azure/communication-react", + "email": "98852890+vhuseinova-msft@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change/@azure-communication-react-84f1f7b4-4854-4450-9214-b4b3ec9c47d5.json b/change/@azure-communication-react-84f1f7b4-4854-4450-9214-b4b3ec9c47d5.json new file mode 100644 index 00000000000..fda60065df3 --- /dev/null +++ b/change/@azure-communication-react-84f1f7b4-4854-4450-9214-b4b3ec9c47d5.json @@ -0,0 +1,9 @@ +{ + "type": "patch", + "area": "fix", + "workstream": "", + "comment": "Remove unreachable code", + "packageName": "@azure/communication-react", + "email": "77021369+jimchou-dev@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change/@azure-communication-react-8f3f7c74-3500-4ecb-994e-9da8d77d415b.json b/change/@azure-communication-react-8f3f7c74-3500-4ecb-994e-9da8d77d415b.json new file mode 100644 index 00000000000..266cbfc56a5 --- /dev/null +++ b/change/@azure-communication-react-8f3f7c74-3500-4ecb-994e-9da8d77d415b.json @@ -0,0 +1,9 @@ +{ + "type": "patch", + "area": "improvement", + "workstream": "Hard mute", + "comment": "Add story book for Media access (hard mute) feature", + "packageName": "@azure/communication-react", + "email": "fuyan@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index e5bce57e0a4..617e26ca1a3 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -15234,41 +15234,41 @@ packages: fsevents: 2.3.3 dev: false - /roosterjs-content-model-api@9.15.0: - resolution: {integrity: sha512-H1KOBrc4AhxuAfDNxkHRJR84ofdyukEuekx73RAQj7fJTMMqWWHEg1rRzpiV6yW5mRbzXh9asGrzDkbXulrnNQ==} + /roosterjs-content-model-api@9.16.0: + resolution: {integrity: sha512-3UpahYDzizSmw1LpSZbIGqxCRgCQ2bFssdQ87LlvYiQ++ECShz+jzzU6iIa1mC9PO7egr9nu062JkFwIghJs3A==} dependencies: - roosterjs-content-model-dom: 9.15.0 - roosterjs-content-model-types: 9.15.0 + roosterjs-content-model-dom: 9.16.0 + roosterjs-content-model-types: 9.16.0 tslib: 2.8.1 dev: false - /roosterjs-content-model-core@9.15.0: - resolution: {integrity: sha512-+KtyviOmaizYOgE5QHuanuWdQXnAO56HVl6tPSWD2aCQ4ylhciCTrqblttoTyKY706mNAnEypNdj8GXDOG1tOA==} + /roosterjs-content-model-core@9.16.0: + resolution: {integrity: sha512-Zkx150MZz82wdOMcH19XCCNcd2BNVzkhP323womQ0VEXuuS7GWIU+gvOiTdoOdBRk2w5CLDzflueDrrjeAJRkA==} dependencies: - roosterjs-content-model-dom: 9.15.0 - roosterjs-content-model-types: 9.15.0 + roosterjs-content-model-dom: 9.16.0 + roosterjs-content-model-types: 9.16.0 tslib: 2.8.1 dev: false - /roosterjs-content-model-dom@9.15.0: - resolution: {integrity: sha512-qvwHK9nMIq9m8TSoJuHR3oGESZnIcA+iHlFa6aO6y2TpGirae2lfpJj1QOgqIqqgCl11s9+/2bG+kOix4sLB0A==} + /roosterjs-content-model-dom@9.16.0: + resolution: {integrity: sha512-uxhrSBGOmYkDUyhnFg4Xg6JqNrSXfftjfU8QnbSH0Egi3nVdqV7jhk0d67joTYwIGs5wfqr6m32j6/A5++7f+g==} dependencies: - roosterjs-content-model-types: 9.15.0 + roosterjs-content-model-types: 9.16.0 tslib: 2.8.1 dev: false - /roosterjs-content-model-plugins@9.15.1: - resolution: {integrity: sha512-z4sHCnCAmmPC0aqcCEb/JlXafNIZ4WaGkCXnwB+mfDhySpwpQs2CKsKHdp5GAcgrC2jAToJxbnwAMcx2s+lC6g==} + /roosterjs-content-model-plugins@9.16.0: + resolution: {integrity: sha512-53dJeYdi/Lr1HAR9+sw+XIDxRzQFM10EqdPRegAoTCNCJjPO32MsE1Qr79U82XXYX0MA3PSmBgB2TEahmPuQmw==} dependencies: - roosterjs-content-model-api: 9.15.0 - roosterjs-content-model-core: 9.15.0 - roosterjs-content-model-dom: 9.15.0 - roosterjs-content-model-types: 9.15.0 + roosterjs-content-model-api: 9.16.0 + roosterjs-content-model-core: 9.16.0 + roosterjs-content-model-dom: 9.16.0 + roosterjs-content-model-types: 9.16.0 tslib: 2.8.1 dev: false - /roosterjs-content-model-types@9.15.0: - resolution: {integrity: sha512-79ke+h/5E7wVCU/1opFwInZhplRTPk0IJ8acjXJMeqwWh8Y7RHlirgR3+E0OurwLqtnlgyXAL5ulFBYViSmmIw==} + /roosterjs-content-model-types@9.16.0: + resolution: {integrity: sha512-zebNCTrhjsvNHWd2hVUK/lK2+982rlYGm4xHRdK1KnF/e4EO05eJdHZjZ4HqBMjBSdWEHM4L5JCR9gM1SIC8TQ==} dev: false /rtl-css-js@1.16.1: @@ -17989,7 +17989,7 @@ packages: dev: false file:projects/acs-ui-javascript-loaders.tgz: - resolution: {integrity: sha512-PcJcDp95gmokpkuRWAC1C/dMdB7gzdIsp0dLPqOy/LwX8XS822HypEvO5bwwbIR7/zxTEhcPZriIy1S02n/5ZQ==, tarball: file:projects/acs-ui-javascript-loaders.tgz} + resolution: {integrity: sha512-SdcK4nbiGYl2a5uuu5mCGUMn87HfyevcvBrGT6VhazdF0BPZz7rdgalMJ+/m6tuhkKcz6IUmBBo4ix5mjjpK/w==, tarball: file:projects/acs-ui-javascript-loaders.tgz} name: '@rush-temp/acs-ui-javascript-loaders' version: 0.0.0 dependencies: @@ -18037,7 +18037,7 @@ packages: dev: false file:projects/calling-component-bindings.tgz: - resolution: {integrity: sha512-+qTwaBmFG7kcjmzuWf2XEhRZKm27btXzHZ72ELmmaKHAFS2xAH834KAegVODGxLnaiDP2UofX+P+5vwuyX33aA==, tarball: file:projects/calling-component-bindings.tgz} + resolution: {integrity: sha512-bmkDBGd6quqjSkjGiHW+sh2pcBMdtizT3bLh+e8EpYBU1yzD+F08VoYVWLeWUtAKyHwAU9FcMLp06I2UQgEyKg==, tarball: file:projects/calling-component-bindings.tgz} name: '@rush-temp/calling-component-bindings' version: 0.0.0 dependencies: @@ -18084,7 +18084,7 @@ packages: dev: false file:projects/calling-stateful-client.tgz: - resolution: {integrity: sha512-xOaWYnpIcpTFuaI5ptmffVpQcog1lzEPco/YJzbSwvuKrI4bXaFA4XlcbfAuCrvg/hSo8TFpYz7zL3FG4SOUcg==, tarball: file:projects/calling-stateful-client.tgz} + resolution: {integrity: sha512-qeGY7Dzfg2JhypxRj+WgqVNVNzVDXLySZF/0uIgHSAGqKtAiQz7HrIUF9kbKZxt3lyDo6ZoCVQW7Iz7fL3/kQA==, tarball: file:projects/calling-stateful-client.tgz} name: '@rush-temp/calling-stateful-client' version: 0.0.0 dependencies: @@ -18132,7 +18132,7 @@ packages: dev: false file:projects/calling-stateful-samples.tgz: - resolution: {integrity: sha512-kB9196ZrAK4tXQ0FW0jHRdH6jIwxLR1vZGVp00bGxQyFI7JVkw3WgjyNJ9XQ207V8ET8g+3ACMlFyNPhNcQ14g==, tarball: file:projects/calling-stateful-samples.tgz} + resolution: {integrity: sha512-ylQ7+ijsUxSSDmbE+6Ar5TiloHJ+EIEGDOi9K4I8fz88PPTMWkbp1DIo4wIZq76XEkDWh/cIHf6GB8DcBi8w1Q==, tarball: file:projects/calling-stateful-samples.tgz} name: '@rush-temp/calling-stateful-samples' version: 0.0.0 dependencies: @@ -18226,7 +18226,7 @@ packages: dev: false file:projects/calling.tgz: - resolution: {integrity: sha512-utF+Vj+1523XcaS+D+cVYOo0kdf6wupeQBl2gAXxP7WElHgo+DX9rwDA5w+TgSeFBLcrMXBW02AXrVV2jaZfeg==, tarball: file:projects/calling.tgz} + resolution: {integrity: sha512-EP69o8RqqJGKw+kSa6xSZ7YzZ2fTqGDK3d/ORSvxvqVqo3BMpUrmrl3Yp7IBWO2Q3RHSlJkWKGUe98Jg7R0A7w==, tarball: file:projects/calling.tgz} name: '@rush-temp/calling' version: 0.0.0 dependencies: @@ -18320,7 +18320,7 @@ packages: dev: false file:projects/callwithchat.tgz: - resolution: {integrity: sha512-4BHAFPWpG5p1B13SB8byOgqF9GnaYmb8UnqXM9QRGwcmO5BJ1mVR67ilgNMTiE/hZy+NCbONnzYkveVWMijBHA==, tarball: file:projects/callwithchat.tgz} + resolution: {integrity: sha512-YhazbYTBTzzCqV+hv+lUsOb7mG4m9utUzdtszCer7tSPcmw0N6oj7I+YTlrYPHqpqyWeWDVyORdyd48+4EKdKg==, tarball: file:projects/callwithchat.tgz} name: '@rush-temp/callwithchat' version: 0.0.0 dependencies: @@ -18413,7 +18413,7 @@ packages: dev: false file:projects/chat-component-bindings.tgz: - resolution: {integrity: sha512-vsLEKsMU0o/kM3Xw+9qPMv8xIn6g106EpqaVKDvq0B2XpKvukDu0OqqZQv0WyOA0pMyrOMcwwuFViT5mVZoTfA==, tarball: file:projects/chat-component-bindings.tgz} + resolution: {integrity: sha512-zWQX2qp2TU6kR8p9V6/YKXHwtV6tlQqSaatiLVqVhrhYRsYu8x/3Hi9g/f6lhZefDh4/4AR2zjxKU3umN9yzlQ==, tarball: file:projects/chat-component-bindings.tgz} name: '@rush-temp/chat-component-bindings' version: 0.0.0 dependencies: @@ -18461,7 +18461,7 @@ packages: dev: false file:projects/chat-stateful-client.tgz: - resolution: {integrity: sha512-E1/s34UHr/Lu9AzHttPnUXVDha/rlTK9oswX5Z4FUsbPKAUZpks6KjJisSEiWaD7HZUhXQ4lDoEBjTjfmZHmtw==, tarball: file:projects/chat-stateful-client.tgz} + resolution: {integrity: sha512-XCsWPdre/BLX78wZyKAstMqHg+9+le5yY5rUkzbgUuKQCTNs1Psn1SJIPvtXc+lUXYyuCOl65zCr/kj+CSOJTg==, tarball: file:projects/chat-stateful-client.tgz} name: '@rush-temp/chat-stateful-client' version: 0.0.0 dependencies: @@ -18513,7 +18513,7 @@ packages: dev: false file:projects/chat.tgz: - resolution: {integrity: sha512-UcKSgkALnDSAhGSUpIhUDrwsujw01XFZhmWqOpGZFEyQQoraEsa0vxco1e7S7uKMvELCW6XQg5LOAEOo8cTOCQ==, tarball: file:projects/chat.tgz} + resolution: {integrity: sha512-rYxqYX2CPDx7IO9ddPEgkx9E04qkOxHbZjoCy/idnmBJ1f+w4AsD773CXWtqsccHwhTSPH3kQavDpGbsMwt/hw==, tarball: file:projects/chat.tgz} name: '@rush-temp/chat' version: 0.0.0 dependencies: @@ -18603,7 +18603,7 @@ packages: dev: false file:projects/check-treeshaking.tgz: - resolution: {integrity: sha512-jfX72zXgjVi77U+FvPC2/0KsJJh3QYZKkGJJAHhLvhqBhYHybazfohaECGVZ3cXt4Blj75eZrvP09V/mR7NBLg==, tarball: file:projects/check-treeshaking.tgz} + resolution: {integrity: sha512-hNva6Y/bDwuUQRfyDcOUb2dgCBVLVPPMwoUk8RnZIrI3KZsGQaJ5gAEAy+quv/VpiIqmuAQUOmRWEiFNS0yEWw==, tarball: file:projects/check-treeshaking.tgz} name: '@rush-temp/check-treeshaking' version: 0.0.0 dependencies: @@ -18632,7 +18632,7 @@ packages: dev: false file:projects/check-typescript-regression.tgz: - resolution: {integrity: sha512-gtOjnGU/4YMX3B/X2otCJGDstagU8ekDVLe8F9pqlBqww8YYtJ1uyIBzqM1tlCPHWTaIqY77iOjNn+sPWSXHTw==, tarball: file:projects/check-typescript-regression.tgz} + resolution: {integrity: sha512-AceqgzoH2JYUxns2dbBqXeuBii0wTKhkgbEYKQQcZ6VUlV7bfOcYZCSQKme/E2WhGabGuIPKago5TWl/MUS4RQ==, tarball: file:projects/check-typescript-regression.tgz} name: '@rush-temp/check-typescript-regression' version: 0.0.0 dependencies: @@ -18651,7 +18651,7 @@ packages: dev: false file:projects/communication-react.tgz: - resolution: {integrity: sha512-HTxgjg15MxppeNOWr264O/PqOVAaG4xaTGzwLEXCK1oF7pzYzsActqolYtoqZH4qFdKsCwLTlbTvIrDoX6+ANA==, tarball: file:projects/communication-react.tgz} + resolution: {integrity: sha512-BhHzqQkJvXFZqEaF/BOGZiegY8PBTEQ8Dr2F1kyVwXU8M3zalZp5k2usHqmoPscJXlpW5FSlXgkrsjR+/a+IhQ==, tarball: file:projects/communication-react.tgz} name: '@rush-temp/communication-react' version: 0.0.0 dependencies: @@ -18724,11 +18724,11 @@ packages: reselect: 4.1.8 rimraf: 2.7.1 rollup: 4.28.0 - roosterjs-content-model-api: 9.15.0 - roosterjs-content-model-core: 9.15.0 - roosterjs-content-model-dom: 9.15.0 - roosterjs-content-model-plugins: 9.15.1 - roosterjs-content-model-types: 9.15.0 + roosterjs-content-model-api: 9.16.0 + roosterjs-content-model-core: 9.16.0 + roosterjs-content-model-dom: 9.16.0 + roosterjs-content-model-plugins: 9.16.0 + roosterjs-content-model-types: 9.16.0 scheduler: 0.23.2 source-map-explorer: 2.5.3 textarea-caret-ts: 4.1.1 @@ -18757,7 +18757,7 @@ packages: dev: false file:projects/component-examples.tgz: - resolution: {integrity: sha512-0GHPCZiki4EYC9GnNYi9R4RFammt0GyXsJPOZF2u83vMUqIBkVqQM5s8cxTk4wVA9yDNOBeie/+DxIoLXZPY5w==, tarball: file:projects/component-examples.tgz} + resolution: {integrity: sha512-v6VWjyfZ3iLzNyXZI8GymegU6LW3YPRKXhJdYXKY5ftMixa94EHhihQ3MM0OBQxe5zUjd5XJQsj/oQf3mJNr2w==, tarball: file:projects/component-examples.tgz} name: '@rush-temp/component-examples' version: 0.0.0 dependencies: @@ -18859,7 +18859,7 @@ packages: dev: false file:projects/fake-backends.tgz: - resolution: {integrity: sha512-uR/DKcNI/fv4StG/93mJucUHYfx2wKz8djEJAD36TIDQ2g1Te5Ac82mcshmqBth/xrkNBIgHH85XISXBiZ96Sg==, tarball: file:projects/fake-backends.tgz} + resolution: {integrity: sha512-n1hKtchujLGdw8P5PVsREfrY/0+lYmjebewRyHZcyqjMldEUALd2z/OaskefZLwZmo6DGfp1WOoXx3juZO3wsA==, tarball: file:projects/fake-backends.tgz} name: '@rush-temp/fake-backends' version: 0.0.0 dependencies: @@ -18916,7 +18916,7 @@ packages: dev: false file:projects/react-components.tgz: - resolution: {integrity: sha512-wAl8EzjlmYnhiO1GferhE2H6aCwXtbvSsDXC+guNUZwHmzJv7nm7gLAa+TWQz+oaDNj/f0htMvI6q3ZojWTT4A==, tarball: file:projects/react-components.tgz} + resolution: {integrity: sha512-8ag1tWRo+v+2xDx68wMg4WhpfLaoWV0gao0aZlME1xGLv2GHgqH4SdDgHZvpSXDF71gucibssyPw3pvCj0aQHg==, tarball: file:projects/react-components.tgz} name: '@rush-temp/react-components' version: 0.0.0 dependencies: @@ -18991,11 +18991,11 @@ packages: regenerator-runtime: 0.14.1 rimraf: 2.7.1 rollup: 4.28.0 - roosterjs-content-model-api: 9.15.0 - roosterjs-content-model-core: 9.15.0 - roosterjs-content-model-dom: 9.15.0 - roosterjs-content-model-plugins: 9.15.1 - roosterjs-content-model-types: 9.15.0 + roosterjs-content-model-api: 9.16.0 + roosterjs-content-model-core: 9.16.0 + roosterjs-content-model-dom: 9.16.0 + roosterjs-content-model-plugins: 9.16.0 + roosterjs-content-model-types: 9.16.0 scheduler: 0.23.2 source-map-explorer: 2.5.3 textarea-caret-ts: 4.1.1 @@ -19033,7 +19033,7 @@ packages: dev: false file:projects/react-composites.tgz: - resolution: {integrity: sha512-b5KLVra7Km125Nr2NnKzjl5saYToDh17ZdLI93y8n1EZ1cxQJX2YqOkcOSM2wbNu8sAJCFr1HdRAvEMKzxOZeg==, tarball: file:projects/react-composites.tgz} + resolution: {integrity: sha512-3HDDRPtGnl5bIvxzF8CW0qxjhc1vWED3oojPlfm7Zg47/Nx+qq+vA0XcCsrtq4ln2m6roZj9PSiLwjzhXWL7vw==, tarball: file:projects/react-composites.tgz} name: '@rush-temp/react-composites' version: 0.0.0 dependencies: @@ -19177,7 +19177,7 @@ packages: dev: false file:projects/sample-static-html-composites.tgz: - resolution: {integrity: sha512-TOAfAbpoY7lhrNFIhHlFrJiyNX/pGGmm0YESMIGDpDY5kTo+L5lNFzgbleKThl/lUgHidlc4gyot0Rrlx0nwbA==, tarball: file:projects/sample-static-html-composites.tgz} + resolution: {integrity: sha512-UtfNEWIDY60ZwuzurB0tCN0PvfHmIsVAByRMfWy2UWZ8jquYia1gPBZY102lYhNY6h4+T2zpYrBoA+fn5283vQ==, tarball: file:projects/sample-static-html-composites.tgz} name: '@rush-temp/sample-static-html-composites' version: 0.0.0 dependencies: @@ -19328,7 +19328,7 @@ packages: dev: false file:projects/storybook8.tgz: - resolution: {integrity: sha512-RK0/V1JxsV+wtiegzWZr9tGfjC+oM3WjFU2vLDq73WaVapS3UmIg08RH2DCVdFFvYMqQRPRVUSAwtj3huKVYtg==, tarball: file:projects/storybook8.tgz} + resolution: {integrity: sha512-NSttU4/oYChcVytibGD9kjDnmrHYk7755QKLEnhZ850KYehrpojXUV97SoAlBu0HEHFJhy3LXtRIyKIKlUFNiw==, tarball: file:projects/storybook8.tgz} name: '@rush-temp/storybook8' version: 0.0.0 dependencies: diff --git a/common/config/rush/variants/stable/pnpm-lock.yaml b/common/config/rush/variants/stable/pnpm-lock.yaml index eb37a9a4209..694ca6cdfa8 100644 --- a/common/config/rush/variants/stable/pnpm-lock.yaml +++ b/common/config/rush/variants/stable/pnpm-lock.yaml @@ -15212,41 +15212,41 @@ packages: fsevents: 2.3.3 dev: false - /roosterjs-content-model-api@9.13.0: - resolution: {integrity: sha512-nO8tS/2zuOeOCnJ2cyLxT3oHS3/TUqaUeggb9ZZrjFQpWOu4363iVcm4FrHvh0iu0TuK3/HazH81wtQMbuMe2w==} + /roosterjs-content-model-api@9.16.0: + resolution: {integrity: sha512-3UpahYDzizSmw1LpSZbIGqxCRgCQ2bFssdQ87LlvYiQ++ECShz+jzzU6iIa1mC9PO7egr9nu062JkFwIghJs3A==} dependencies: - roosterjs-content-model-dom: 9.13.0 - roosterjs-content-model-types: 9.13.0 + roosterjs-content-model-dom: 9.16.0 + roosterjs-content-model-types: 9.16.0 tslib: 2.8.1 dev: false - /roosterjs-content-model-core@9.13.0: - resolution: {integrity: sha512-k5ECUWu+Lgskkyf8yGWQhyRtvOnVjKJ11z8Gn0uzD26JvMp6LJv2s+zfcRnHDhmjxbs9IvOhMZOiHM6V+Qo07Q==} + /roosterjs-content-model-core@9.16.0: + resolution: {integrity: sha512-Zkx150MZz82wdOMcH19XCCNcd2BNVzkhP323womQ0VEXuuS7GWIU+gvOiTdoOdBRk2w5CLDzflueDrrjeAJRkA==} dependencies: - roosterjs-content-model-dom: 9.13.0 - roosterjs-content-model-types: 9.13.0 + roosterjs-content-model-dom: 9.16.0 + roosterjs-content-model-types: 9.16.0 tslib: 2.8.1 dev: false - /roosterjs-content-model-dom@9.13.0: - resolution: {integrity: sha512-U+2xs7cdhDFElvrKC4BOf1SIpAhDLfdpg56Q+FxeNtfMLE9mYBkhJ8z/fsjPU/R3u/gZNM90ZucM58OcNt+GXw==} + /roosterjs-content-model-dom@9.16.0: + resolution: {integrity: sha512-uxhrSBGOmYkDUyhnFg4Xg6JqNrSXfftjfU8QnbSH0Egi3nVdqV7jhk0d67joTYwIGs5wfqr6m32j6/A5++7f+g==} dependencies: - roosterjs-content-model-types: 9.13.0 + roosterjs-content-model-types: 9.16.0 tslib: 2.8.1 dev: false - /roosterjs-content-model-plugins@9.13.0: - resolution: {integrity: sha512-pxJs2a/NFLcId4nPtHMO7LFe5meffirNsSre0oSEeqJ3IRD6StFrmR56bCHsgDlLGV9q9jXWdLAw2eeeriyCdg==} + /roosterjs-content-model-plugins@9.16.0: + resolution: {integrity: sha512-53dJeYdi/Lr1HAR9+sw+XIDxRzQFM10EqdPRegAoTCNCJjPO32MsE1Qr79U82XXYX0MA3PSmBgB2TEahmPuQmw==} dependencies: - roosterjs-content-model-api: 9.13.0 - roosterjs-content-model-core: 9.13.0 - roosterjs-content-model-dom: 9.13.0 - roosterjs-content-model-types: 9.13.0 + roosterjs-content-model-api: 9.16.0 + roosterjs-content-model-core: 9.16.0 + roosterjs-content-model-dom: 9.16.0 + roosterjs-content-model-types: 9.16.0 tslib: 2.8.1 dev: false - /roosterjs-content-model-types@9.13.0: - resolution: {integrity: sha512-M4nB+30jVImadDoZHSZDSFt3m7t3jZ9JW8cqtlnlU/cnfCgqvfz2NoO7iUgXStYT3A/fg4Tk76F6JLkStXrIjw==} + /roosterjs-content-model-types@9.16.0: + resolution: {integrity: sha512-zebNCTrhjsvNHWd2hVUK/lK2+982rlYGm4xHRdK1KnF/e4EO05eJdHZjZ4HqBMjBSdWEHM4L5JCR9gM1SIC8TQ==} dev: false /rtl-css-js@1.16.1: @@ -17945,7 +17945,7 @@ packages: dev: false file:projects/acs-ui-javascript-loaders.tgz: - resolution: {integrity: sha512-PcJcDp95gmokpkuRWAC1C/dMdB7gzdIsp0dLPqOy/LwX8XS822HypEvO5bwwbIR7/zxTEhcPZriIy1S02n/5ZQ==, tarball: file:projects/acs-ui-javascript-loaders.tgz} + resolution: {integrity: sha512-SdcK4nbiGYl2a5uuu5mCGUMn87HfyevcvBrGT6VhazdF0BPZz7rdgalMJ+/m6tuhkKcz6IUmBBo4ix5mjjpK/w==, tarball: file:projects/acs-ui-javascript-loaders.tgz} name: '@rush-temp/acs-ui-javascript-loaders' version: 0.0.0 dependencies: @@ -17992,7 +17992,7 @@ packages: dev: false file:projects/calling-component-bindings.tgz: - resolution: {integrity: sha512-FRIcF57CTACu4pf9+WTOg9CPlbZ8GuCYvpuvP2mm3rvz0l5olv5qY41ihb60306NyRtDjfOduHojWOGUwHln0w==, tarball: file:projects/calling-component-bindings.tgz} + resolution: {integrity: sha512-bmkDBGd6quqjSkjGiHW+sh2pcBMdtizT3bLh+e8EpYBU1yzD+F08VoYVWLeWUtAKyHwAU9FcMLp06I2UQgEyKg==, tarball: file:projects/calling-component-bindings.tgz} name: '@rush-temp/calling-component-bindings' version: 0.0.0 dependencies: @@ -18039,7 +18039,7 @@ packages: dev: false file:projects/calling-stateful-client.tgz: - resolution: {integrity: sha512-cGH2rbnDCnSGwxTJMWhi0UtJuz5ZbSv7GidhfMGZTB8qsqlNiO6+5rfFdGSrOvhhzX6z47/1A7vtwk0O6Q8A0Q==, tarball: file:projects/calling-stateful-client.tgz} + resolution: {integrity: sha512-qeGY7Dzfg2JhypxRj+WgqVNVNzVDXLySZF/0uIgHSAGqKtAiQz7HrIUF9kbKZxt3lyDo6ZoCVQW7Iz7fL3/kQA==, tarball: file:projects/calling-stateful-client.tgz} name: '@rush-temp/calling-stateful-client' version: 0.0.0 dependencies: @@ -18087,7 +18087,7 @@ packages: dev: false file:projects/calling-stateful-samples.tgz: - resolution: {integrity: sha512-d0/ydPD3s2N46B1HBnoOWKD7ECTcx/jcJ/zMg37ZmNacstBNPlAok9jNYKkrzCJjRCc0CwcJcJg3rKvoozXRTg==, tarball: file:projects/calling-stateful-samples.tgz} + resolution: {integrity: sha512-ylQ7+ijsUxSSDmbE+6Ar5TiloHJ+EIEGDOi9K4I8fz88PPTMWkbp1DIo4wIZq76XEkDWh/cIHf6GB8DcBi8w1Q==, tarball: file:projects/calling-stateful-samples.tgz} name: '@rush-temp/calling-stateful-samples' version: 0.0.0 dependencies: @@ -18181,7 +18181,7 @@ packages: dev: false file:projects/calling.tgz: - resolution: {integrity: sha512-LnjhGTGfQK3pma8g6Zskqn9utc3sMavBAv6PKzZM0fwkFam3A8ncMc5jylqZgHGeXgL1CjmV13jXv32AeFkq9Q==, tarball: file:projects/calling.tgz} + resolution: {integrity: sha512-EP69o8RqqJGKw+kSa6xSZ7YzZ2fTqGDK3d/ORSvxvqVqo3BMpUrmrl3Yp7IBWO2Q3RHSlJkWKGUe98Jg7R0A7w==, tarball: file:projects/calling.tgz} name: '@rush-temp/calling' version: 0.0.0 dependencies: @@ -18275,7 +18275,7 @@ packages: dev: false file:projects/callwithchat.tgz: - resolution: {integrity: sha512-g5KpVlUYgla5HfMnz7w/9dzFj+Req5RNfqiCWZrQwhTPy4+Ot1Hq1D2FKiO6RDtmIAs1XKSJG1Nusyk5VLu5tg==, tarball: file:projects/callwithchat.tgz} + resolution: {integrity: sha512-YhazbYTBTzzCqV+hv+lUsOb7mG4m9utUzdtszCer7tSPcmw0N6oj7I+YTlrYPHqpqyWeWDVyORdyd48+4EKdKg==, tarball: file:projects/callwithchat.tgz} name: '@rush-temp/callwithchat' version: 0.0.0 dependencies: @@ -18367,7 +18367,7 @@ packages: dev: false file:projects/chat-component-bindings.tgz: - resolution: {integrity: sha512-vsLEKsMU0o/kM3Xw+9qPMv8xIn6g106EpqaVKDvq0B2XpKvukDu0OqqZQv0WyOA0pMyrOMcwwuFViT5mVZoTfA==, tarball: file:projects/chat-component-bindings.tgz} + resolution: {integrity: sha512-zWQX2qp2TU6kR8p9V6/YKXHwtV6tlQqSaatiLVqVhrhYRsYu8x/3Hi9g/f6lhZefDh4/4AR2zjxKU3umN9yzlQ==, tarball: file:projects/chat-component-bindings.tgz} name: '@rush-temp/chat-component-bindings' version: 0.0.0 dependencies: @@ -18413,7 +18413,7 @@ packages: dev: false file:projects/chat-stateful-client.tgz: - resolution: {integrity: sha512-E1/s34UHr/Lu9AzHttPnUXVDha/rlTK9oswX5Z4FUsbPKAUZpks6KjJisSEiWaD7HZUhXQ4lDoEBjTjfmZHmtw==, tarball: file:projects/chat-stateful-client.tgz} + resolution: {integrity: sha512-XCsWPdre/BLX78wZyKAstMqHg+9+le5yY5rUkzbgUuKQCTNs1Psn1SJIPvtXc+lUXYyuCOl65zCr/kj+CSOJTg==, tarball: file:projects/chat-stateful-client.tgz} name: '@rush-temp/chat-stateful-client' version: 0.0.0 dependencies: @@ -18463,7 +18463,7 @@ packages: dev: false file:projects/chat.tgz: - resolution: {integrity: sha512-UcKSgkALnDSAhGSUpIhUDrwsujw01XFZhmWqOpGZFEyQQoraEsa0vxco1e7S7uKMvELCW6XQg5LOAEOo8cTOCQ==, tarball: file:projects/chat.tgz} + resolution: {integrity: sha512-rYxqYX2CPDx7IO9ddPEgkx9E04qkOxHbZjoCy/idnmBJ1f+w4AsD773CXWtqsccHwhTSPH3kQavDpGbsMwt/hw==, tarball: file:projects/chat.tgz} name: '@rush-temp/chat' version: 0.0.0 dependencies: @@ -18552,7 +18552,7 @@ packages: dev: false file:projects/check-treeshaking.tgz: - resolution: {integrity: sha512-jfX72zXgjVi77U+FvPC2/0KsJJh3QYZKkGJJAHhLvhqBhYHybazfohaECGVZ3cXt4Blj75eZrvP09V/mR7NBLg==, tarball: file:projects/check-treeshaking.tgz} + resolution: {integrity: sha512-hNva6Y/bDwuUQRfyDcOUb2dgCBVLVPPMwoUk8RnZIrI3KZsGQaJ5gAEAy+quv/VpiIqmuAQUOmRWEiFNS0yEWw==, tarball: file:projects/check-treeshaking.tgz} name: '@rush-temp/check-treeshaking' version: 0.0.0 dependencies: @@ -18580,7 +18580,7 @@ packages: dev: false file:projects/check-typescript-regression.tgz: - resolution: {integrity: sha512-gtOjnGU/4YMX3B/X2otCJGDstagU8ekDVLe8F9pqlBqww8YYtJ1uyIBzqM1tlCPHWTaIqY77iOjNn+sPWSXHTw==, tarball: file:projects/check-typescript-regression.tgz} + resolution: {integrity: sha512-AceqgzoH2JYUxns2dbBqXeuBii0wTKhkgbEYKQQcZ6VUlV7bfOcYZCSQKme/E2WhGabGuIPKago5TWl/MUS4RQ==, tarball: file:projects/check-typescript-regression.tgz} name: '@rush-temp/check-typescript-regression' version: 0.0.0 dependencies: @@ -18598,7 +18598,7 @@ packages: dev: false file:projects/communication-react.tgz: - resolution: {integrity: sha512-dW5EC+yI+RqiezEBHP1m13Ce/8f/2RN6kwAFjXQKi3+fBLadp5mxw0K9G/Tn7BfnEntnWFVRwDrl61NhSSS6Zg==, tarball: file:projects/communication-react.tgz} + resolution: {integrity: sha512-BhHzqQkJvXFZqEaF/BOGZiegY8PBTEQ8Dr2F1kyVwXU8M3zalZp5k2usHqmoPscJXlpW5FSlXgkrsjR+/a+IhQ==, tarball: file:projects/communication-react.tgz} name: '@rush-temp/communication-react' version: 0.0.0 dependencies: @@ -18671,11 +18671,11 @@ packages: reselect: 4.1.8 rimraf: 2.7.1 rollup: 4.27.2 - roosterjs-content-model-api: 9.13.0 - roosterjs-content-model-core: 9.13.0 - roosterjs-content-model-dom: 9.13.0 - roosterjs-content-model-plugins: 9.13.0 - roosterjs-content-model-types: 9.13.0 + roosterjs-content-model-api: 9.16.0 + roosterjs-content-model-core: 9.16.0 + roosterjs-content-model-dom: 9.16.0 + roosterjs-content-model-plugins: 9.16.0 + roosterjs-content-model-types: 9.16.0 scheduler: 0.23.2 source-map-explorer: 2.5.3 textarea-caret-ts: 4.1.1 @@ -18703,7 +18703,7 @@ packages: dev: false file:projects/component-examples.tgz: - resolution: {integrity: sha512-QwCfXy2rD3AnMAg8F8t30VOLmeWeXLZ4N5wjG5jlD4l0zV73Dqov5qt0Bt0nxqGCH0GHwgYPC2l3J4jjyTpVmw==, tarball: file:projects/component-examples.tgz} + resolution: {integrity: sha512-v6VWjyfZ3iLzNyXZI8GymegU6LW3YPRKXhJdYXKY5ftMixa94EHhihQ3MM0OBQxe5zUjd5XJQsj/oQf3mJNr2w==, tarball: file:projects/component-examples.tgz} name: '@rush-temp/component-examples' version: 0.0.0 dependencies: @@ -18802,7 +18802,7 @@ packages: dev: false file:projects/fake-backends.tgz: - resolution: {integrity: sha512-uR/DKcNI/fv4StG/93mJucUHYfx2wKz8djEJAD36TIDQ2g1Te5Ac82mcshmqBth/xrkNBIgHH85XISXBiZ96Sg==, tarball: file:projects/fake-backends.tgz} + resolution: {integrity: sha512-n1hKtchujLGdw8P5PVsREfrY/0+lYmjebewRyHZcyqjMldEUALd2z/OaskefZLwZmo6DGfp1WOoXx3juZO3wsA==, tarball: file:projects/fake-backends.tgz} name: '@rush-temp/fake-backends' version: 0.0.0 dependencies: @@ -18857,7 +18857,7 @@ packages: dev: false file:projects/react-components.tgz: - resolution: {integrity: sha512-wAl8EzjlmYnhiO1GferhE2H6aCwXtbvSsDXC+guNUZwHmzJv7nm7gLAa+TWQz+oaDNj/f0htMvI6q3ZojWTT4A==, tarball: file:projects/react-components.tgz} + resolution: {integrity: sha512-8ag1tWRo+v+2xDx68wMg4WhpfLaoWV0gao0aZlME1xGLv2GHgqH4SdDgHZvpSXDF71gucibssyPw3pvCj0aQHg==, tarball: file:projects/react-components.tgz} name: '@rush-temp/react-components' version: 0.0.0 dependencies: @@ -18931,11 +18931,11 @@ packages: regenerator-runtime: 0.14.1 rimraf: 2.7.1 rollup: 4.27.2 - roosterjs-content-model-api: 9.13.0 - roosterjs-content-model-core: 9.13.0 - roosterjs-content-model-dom: 9.13.0 - roosterjs-content-model-plugins: 9.13.0 - roosterjs-content-model-types: 9.13.0 + roosterjs-content-model-api: 9.16.0 + roosterjs-content-model-core: 9.16.0 + roosterjs-content-model-dom: 9.16.0 + roosterjs-content-model-plugins: 9.16.0 + roosterjs-content-model-types: 9.16.0 scheduler: 0.23.2 source-map-explorer: 2.5.3 textarea-caret-ts: 4.1.1 @@ -18973,7 +18973,7 @@ packages: dev: false file:projects/react-composites.tgz: - resolution: {integrity: sha512-3ebSvHZUIoKQoaA5BWg/4r6vcXSuw/XPSbU0Vhz7KNPaZch129MQ+8wCTtM/RVv8IBcN0C7TlYBAIOVyEUTS3A==, tarball: file:projects/react-composites.tgz} + resolution: {integrity: sha512-3HDDRPtGnl5bIvxzF8CW0qxjhc1vWED3oojPlfm7Zg47/Nx+qq+vA0XcCsrtq4ln2m6roZj9PSiLwjzhXWL7vw==, tarball: file:projects/react-composites.tgz} name: '@rush-temp/react-composites' version: 0.0.0 dependencies: @@ -19092,7 +19092,7 @@ packages: dev: false file:projects/sample-automation-tests.tgz: - resolution: {integrity: sha512-2KzFPm7q6oAORL7cafwYoC66u0htj6UxFWQJWEm61xAn0iAIcYIWwOvCucQRsilY+XRpSc3BYdl96ZcQiTVq2Q==, tarball: file:projects/sample-automation-tests.tgz} + resolution: {integrity: sha512-QAk5eN8qoSzn0bg1c/kEVFUlz/uZy0ByRNWzaglQmVtMKEQQu7xvbnZ9y8+dZfRjyeQ2nq4nelK/CYYcuDLXXg==, tarball: file:projects/sample-automation-tests.tgz} name: '@rush-temp/sample-automation-tests' version: 0.0.0 dependencies: @@ -19116,7 +19116,7 @@ packages: dev: false file:projects/sample-static-html-composites.tgz: - resolution: {integrity: sha512-mPY4WcTw0i5x5l4Eoj+kwumd95oVFUkYP/3qSb1j+B6+s30+xpQI2MrMCHKVfJP71R2nmaMwSe4/leKFMW/Zbg==, tarball: file:projects/sample-static-html-composites.tgz} + resolution: {integrity: sha512-UtfNEWIDY60ZwuzurB0tCN0PvfHmIsVAByRMfWy2UWZ8jquYia1gPBZY102lYhNY6h4+T2zpYrBoA+fn5283vQ==, tarball: file:projects/sample-static-html-composites.tgz} name: '@rush-temp/sample-static-html-composites' version: 0.0.0 dependencies: @@ -19264,7 +19264,7 @@ packages: dev: false file:projects/storybook8.tgz: - resolution: {integrity: sha512-Hadr/EFcDfcUeen70idjsur8pd8enFHSnZmuV5BdQKRgC6c3PYfE6Kbj55lmWa0+0vJ2FOrY2VdYfdCBfSuEow==, tarball: file:projects/storybook8.tgz} + resolution: {integrity: sha512-NSttU4/oYChcVytibGD9kjDnmrHYk7755QKLEnhZ850KYehrpojXUV97SoAlBu0HEHFJhy3LXtRIyKIKlUFNiw==, tarball: file:projects/storybook8.tgz} name: '@rush-temp/storybook8' version: 0.0.0 dependencies: diff --git a/packages/calling-component-bindings/src/handlers/createHandlers.ts b/packages/calling-component-bindings/src/handlers/createHandlers.ts index e0e5afc1681..f74bbf109ae 100644 --- a/packages/calling-component-bindings/src/handlers/createHandlers.ts +++ b/packages/calling-component-bindings/src/handlers/createHandlers.ts @@ -15,7 +15,6 @@ import { _toCommunicationIdentifier } from '@internal/acs-ui-common'; import { DeclarativeCallAgent } from '@internal/calling-stateful-client'; import { StatefulCallClient, StatefulDeviceManager } from '@internal/calling-stateful-client'; import memoizeOne from 'memoize-one'; -import { isACSCallParticipants } from '../utils/callUtils'; import { createLocalVideoStream } from '../utils/callUtils'; import { createDefaultCommonCallingHandlers, CommonCallingHandlers } from './createCommonHandlers'; @@ -83,10 +82,6 @@ export const createDefaultCallingHandlers: CreateDefaultCallingHandlers = memoiz // FIXME: onStartCall API should use string, not the underlying SDK types. onStartCall: (participants: CommunicationIdentifier[], options?: StartCallOptions): Call | undefined => { return callAgent?.startCall(participants, options); - if (!isACSCallParticipants(participants)) { - throw new Error('TeamsUserIdentifier in Teams call is not supported!'); - } - return callAgent?.startCall(participants, options); }, onAddParticipant: async ( userId: string | CommunicationIdentifier, diff --git a/packages/calling-component-bindings/src/participantListSelector.ts b/packages/calling-component-bindings/src/participantListSelector.ts index a5a12fa587a..9738ea9ea3a 100644 --- a/packages/calling-component-bindings/src/participantListSelector.ts +++ b/packages/calling-component-bindings/src/participantListSelector.ts @@ -43,7 +43,6 @@ const convertRemoteParticipantsToParticipantListParticipants = ( // Filter out MicrosoftBot participants .filter((participant: RemoteParticipantState) => { return !isMicrosoftTeamsAppIdentifier(participant.identifier); - return true; }) /** * hiding participants who are inLobby, idle, or connecting in ACS clients till we can admit users through ACS clients. diff --git a/packages/communication-react/package.json b/packages/communication-react/package.json index 16f32722109..491317dfc2b 100644 --- a/packages/communication-react/package.json +++ b/packages/communication-react/package.json @@ -45,11 +45,11 @@ "react-linkify": "^1.0.0-alpha", "react-use-draggable-scroll": "^0.4.7", "reselect": "^4.0.0", - "roosterjs-content-model-api": "^9.9.1", - "roosterjs-content-model-core": "^9.9.1", - "roosterjs-content-model-dom": "^9.9.1", - "roosterjs-content-model-plugins": "^9.9.1", - "roosterjs-content-model-types": "^9.9.1", + "roosterjs-content-model-api": "^9.16.0", + "roosterjs-content-model-core": "^9.16.0", + "roosterjs-content-model-dom": "^9.16.0", + "roosterjs-content-model-plugins": "^9.16.0", + "roosterjs-content-model-types": "^9.16.0", "textarea-caret-ts": "^4.1.1", "use-debounce": "^10.0.4", "uuid": "^9.0.0" @@ -177,4 +177,4 @@ "beachball": { "shouldPublish": false } -} \ No newline at end of file +} diff --git a/packages/react-components/package.json b/packages/react-components/package.json index 748e543a5f2..5b5f5c32e06 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -51,11 +51,11 @@ "html-react-parser": "^5.1.18", "react-linkify": "^1.0.0-alpha", "react-use-draggable-scroll": "^0.4.7", - "roosterjs-content-model-api": "^9.9.1", - "roosterjs-content-model-core": "^9.9.1", - "roosterjs-content-model-dom": "^9.9.1", - "roosterjs-content-model-plugins": "^9.9.1", - "roosterjs-content-model-types": "^9.9.1", + "roosterjs-content-model-api": "^9.16.0", + "roosterjs-content-model-core": "^9.16.0", + "roosterjs-content-model-dom": "^9.16.0", + "roosterjs-content-model-plugins": "^9.16.0", + "roosterjs-content-model-types": "^9.16.0", "textarea-caret-ts": "^4.1.1", "use-debounce": "^10.0.4", "uuid": "^9.0.0" @@ -131,4 +131,4 @@ "typescript": "5.4.5", "webpack": "5.95.0" } -} \ No newline at end of file +} diff --git a/packages/react-components/src/components/ChatMessage/ChatMessageContent.tsx b/packages/react-components/src/components/ChatMessage/ChatMessageContent.tsx index 09eb965d381..5045cf17952 100644 --- a/packages/react-components/src/components/ChatMessage/ChatMessageContent.tsx +++ b/packages/react-components/src/components/ChatMessage/ChatMessageContent.tsx @@ -244,7 +244,6 @@ export const getAttachmentCountLiveMessage = ( return _formatString(attachmentCardGroupMessage, { attachmentCount: `${attachments.length}` }); - return ''; }; const defaultOnRenderInlineImage = (inlineImage: InlineImage): JSX.Element => { diff --git a/packages/react-components/src/components/LocalVideoTile.tsx b/packages/react-components/src/components/LocalVideoTile.tsx index ea1d3fcc05c..9c888ea0a88 100644 --- a/packages/react-components/src/components/LocalVideoTile.tsx +++ b/packages/react-components/src/components/LocalVideoTile.tsx @@ -154,7 +154,6 @@ export const _LocalVideoTile = React.memo( return { contextualMenu: contextualMenuProps }; - return {}; }, [contextualMenuProps, menuKind]); const videoTileStyles = useMemo(() => { diff --git a/packages/react-components/src/components/VideoGallery.tsx b/packages/react-components/src/components/VideoGallery.tsx index 5db7ad5c6ee..d4943566f5a 100644 --- a/packages/react-components/src/components/VideoGallery.tsx +++ b/packages/react-components/src/components/VideoGallery.tsx @@ -508,7 +508,6 @@ export const VideoGallery = (props: VideoGalleryProps): JSX.Element => { const showDisplayNameTrampoline = (): string => { return layout === 'default' ? strings.localVideoLabel : isNarrow ? '' : strings.localVideoLabel; - return isNarrow ? '' : strings.localVideoLabel; }; return ( diff --git a/packages/react-components/src/components/VideoGallery/DefaultLayout.tsx b/packages/react-components/src/components/VideoGallery/DefaultLayout.tsx index 3e7c902ccb2..765d13ef6ef 100644 --- a/packages/react-components/src/components/VideoGallery/DefaultLayout.tsx +++ b/packages/react-components/src/components/VideoGallery/DefaultLayout.tsx @@ -150,5 +150,4 @@ const overflowGalleryTrampoline = ( galleryPosition?: 'horizontalBottom' | 'verticalRight' | 'horizontalTop' ): JSX.Element | null => { return galleryPosition !== 'horizontalTop' ? gallery : <>; - return gallery; }; diff --git a/packages/react-components/src/components/VideoGallery/FloatingLocalVideoLayout.tsx b/packages/react-components/src/components/VideoGallery/FloatingLocalVideoLayout.tsx index 3bd6c1a87f1..3b6f71f5e3f 100644 --- a/packages/react-components/src/components/VideoGallery/FloatingLocalVideoLayout.tsx +++ b/packages/react-components/src/components/VideoGallery/FloatingLocalVideoLayout.tsx @@ -240,5 +240,4 @@ const overflowGalleryTrampoline = ( galleryPosition?: 'horizontalBottom' | 'verticalRight' | 'horizontalTop' ): JSX.Element | null => { return galleryPosition !== 'horizontalTop' ? gallery : <>; - return gallery; }; diff --git a/packages/react-components/src/components/VideoGallery/SpeakerVideoLayout.tsx b/packages/react-components/src/components/VideoGallery/SpeakerVideoLayout.tsx index be8a6566ad6..4ae18ad6e8d 100644 --- a/packages/react-components/src/components/VideoGallery/SpeakerVideoLayout.tsx +++ b/packages/react-components/src/components/VideoGallery/SpeakerVideoLayout.tsx @@ -208,5 +208,4 @@ const overflowGalleryTrampoline = ( galleryPosition?: 'horizontalBottom' | 'verticalRight' | 'horizontalTop' ): JSX.Element | null => { return galleryPosition !== 'horizontalTop' ? gallery : <>; - return gallery; }; diff --git a/packages/react-components/src/components/utils/ChatMessageComponentUtils.tsx b/packages/react-components/src/components/utils/ChatMessageComponentUtils.tsx index e4699dc3fc4..6edd97f207a 100644 --- a/packages/react-components/src/components/utils/ChatMessageComponentUtils.tsx +++ b/packages/react-components/src/components/utils/ChatMessageComponentUtils.tsx @@ -103,7 +103,6 @@ const defaultOnRenderAttachmentDownloads = ( ) : ( <> ); - return undefined; }; /** @private */ diff --git a/packages/react-composites/src/composites/CallComposite/components/CallArrangement.tsx b/packages/react-composites/src/composites/CallComposite/components/CallArrangement.tsx index af88a2c7499..1feb7681234 100644 --- a/packages/react-composites/src/composites/CallComposite/components/CallArrangement.tsx +++ b/packages/react-composites/src/composites/CallComposite/components/CallArrangement.tsx @@ -345,7 +345,6 @@ export const CallArrangement = (props: CallArrangementProps): JSX.Element => { onStopAllSpotlight: hideSpotlightButtons ? undefined : stopAllSpotlightWithPrompt, maxParticipantsToSpotlight }; - return {}; }, [ hideSpotlightButtons, maxParticipantsToSpotlight, diff --git a/packages/react-composites/src/composites/CallComposite/components/MediaGallery.tsx b/packages/react-composites/src/composites/CallComposite/components/MediaGallery.tsx index f9116e7289c..24c98c9cd91 100644 --- a/packages/react-composites/src/composites/CallComposite/components/MediaGallery.tsx +++ b/packages/react-composites/src/composites/CallComposite/components/MediaGallery.tsx @@ -189,7 +189,6 @@ export const MediaGallery = (props: MediaGalleryProps): JSX.Element => { const VideoGalleryMemoized = useMemo(() => { const layoutBasedOnUserSelection = (): VideoGalleryLayout => { return props.localVideoTileOptions ? layoutBasedOnTilePosition : props.userSetGalleryLayout; - return layoutBasedOnTilePosition; }; return ( diff --git a/packages/react-composites/src/composites/CallComposite/components/buttons/ScreenShare.tsx b/packages/react-composites/src/composites/CallComposite/components/buttons/ScreenShare.tsx index e62a6099f08..a3f5269a6fb 100644 --- a/packages/react-composites/src/composites/CallComposite/components/buttons/ScreenShare.tsx +++ b/packages/react-composites/src/composites/CallComposite/components/buttons/ScreenShare.tsx @@ -24,7 +24,6 @@ export const ScreenShare = (props: { const screenShareButtonDisabled = (): boolean => { return screenShareButtonProps?.disabled ?? isDisabled(props.option); - return isDisabled(props.option); }; return ( diff --git a/packages/react-composites/src/composites/common/CallingDialpad.tsx b/packages/react-composites/src/composites/common/CallingDialpad.tsx index dc968b6d2d0..a8a0ec955ec 100644 --- a/packages/react-composites/src/composites/common/CallingDialpad.tsx +++ b/packages/react-composites/src/composites/common/CallingDialpad.tsx @@ -84,8 +84,6 @@ export const CallingDialpad = (props: CallingDialpadProps): JSX.Element => { /> ); - - return <>; }; if (isMobile) { diff --git a/packages/react-composites/src/composites/common/PeoplePaneContent.tsx b/packages/react-composites/src/composites/common/PeoplePaneContent.tsx index 6ecfd16f546..4e8b5c15faa 100644 --- a/packages/react-composites/src/composites/common/PeoplePaneContent.tsx +++ b/packages/react-composites/src/composites/common/PeoplePaneContent.tsx @@ -52,8 +52,6 @@ export const PeoplePaneContent = (props: { // eslint-disable-next-line @typescript-eslint/explicit-function-return-type const getStrings = () => { return localeStrings.strings.call; - - return localeStrings.strings.callWithChat; }; const strings = getStrings(); diff --git a/packages/react-composites/src/composites/common/VideoEffectsPane.tsx b/packages/react-composites/src/composites/common/VideoEffectsPane.tsx index 79da0086fe4..8fbd5c180f8 100644 --- a/packages/react-composites/src/composites/common/VideoEffectsPane.tsx +++ b/packages/react-composites/src/composites/common/VideoEffectsPane.tsx @@ -198,7 +198,6 @@ const VideoEffectsPaneTrampoline = ( /> ); - return <>; }; const backgroundPickerStyles = { diff --git a/packages/storybook8/public/images/media-access/media-access-disable-mic-camera-people-pane.png b/packages/storybook8/public/images/media-access/media-access-disable-mic-camera-people-pane.png new file mode 100644 index 00000000000..e44a3d3c850 Binary files /dev/null and b/packages/storybook8/public/images/media-access/media-access-disable-mic-camera-people-pane.png differ diff --git a/packages/storybook8/public/images/media-access/media-access-disable-mic-camera-video-tile.png b/packages/storybook8/public/images/media-access/media-access-disable-mic-camera-video-tile.png new file mode 100644 index 00000000000..aa288d53fdb Binary files /dev/null and b/packages/storybook8/public/images/media-access/media-access-disable-mic-camera-video-tile.png differ diff --git a/packages/storybook8/public/images/media-access/media-access-local-participant-mic-camera-disabled.png b/packages/storybook8/public/images/media-access/media-access-local-participant-mic-camera-disabled.png new file mode 100644 index 00000000000..5cd2479e4cf Binary files /dev/null and b/packages/storybook8/public/images/media-access/media-access-local-participant-mic-camera-disabled.png differ diff --git a/packages/storybook8/stories/Concepts/MediaAccess/Doc.mdx b/packages/storybook8/stories/Concepts/MediaAccess/Doc.mdx new file mode 100644 index 00000000000..601df720fd4 --- /dev/null +++ b/packages/storybook8/stories/Concepts/MediaAccess/Doc.mdx @@ -0,0 +1,77 @@ +import { Meta, Source } from '@storybook/addon-docs'; + +import CustomMediaAccessCompositeText from '!!raw-loader!./snippets/MediaAccessComposite.snippet.tsx'; +import MediaAccessMicCameraCapabilitiesText from '!!raw-loader!./snippets/MediaAccessMicCameraCapabilities.snippet.tsx'; +import MediaAccessRemoteParticipantsText from '!!raw-loader!./snippets/MediaAccessRemoteParticipants.snippet.tsx'; + + + +# Media access + +The media access feature in Teams meetings allows the Organizer, Co-organizer, and Presenter to control whether attendees can enable their mic or camera. +This can be managed through the Teams meeting options “Allow mic/camera for attendees” or on a per-participant basis with the options “Disable mic/camera” and “Enable mic/camera.” + +Teams meeting attendees can check their own media access state using the capabilities `unMuteMic` and `turnVideoOn`, or view the media states for remote participants. + +ACS users must have the Organizer, Co-organizer, or Presenter role to use the media access feature. + +The supported scenarios for the media access feature are: + +- Teams Interop Meetings +- Teams Interop Meetings as a Teams user +- Teams ad-hoc call + +Participants can disable/enable audio/video using the contextual menu button on their video gallery tile like shown below: + + + +Participants can also disable/enable audio/video using the contextual menu button on their participant item in the people pane like +shown below: + + + +A local participant with audio or video disabled will see a mic or camera disabled icon on the control bar, notifications that mic and camera have been disabled and will not be able to unmute or turn the video on, as shown below: + + + +The concept of the media access feature is the same in Microsoft Teams which you can read +more about here - +[Manage attendee audio and video permissions in Microsoft Teams meetings](https://support.microsoft.com/en-us/office/manage-attendee-audio-and-video-permissions-in-microsoft-teams-meetings-f9db15e1-f46f-46da-95c6-34f9f39e671a). + +## Listening to local participant `unmuteMic` and `turnVideoOn` capabilities changes + +You can listen to `capabilitiesChanged` events on the CallAdapter or CallWithChatAdapter by defining your own +`capabilitiesChangedListener` callback. The following code snippet shows an example of listening to `capabilitiesChanged` +events on the CallAdapter to log the added and removed participants to the browser console. But you can choose to +do more if you wish. + + + +Note: Assigning a `capabilitiesChangedListener` callback to listen for 'capabilitiesChanged' events will not override the +behavior of CallComposite and CallWithChatComposite which places participants in the main view of +VideoGallery. + +## UI component to use remote participant(s) media access state + +If you want to build your own UI components using the media access states we suggest using the `VideoGallerySelector` or creating your own custom selector to pipe in the media access states for remote participants to your UI component. +Here is an example of how we put to together the VideoGallery component with these media access states. + + + +## Programatic media access for participants + +The CallAdapter and CallWithChatAdapter can also be used to programatically change media access one or more participants using +the functions `forbidAudio`, `permitAudio`, `forbidVideo`, `permitVideo`, `forbidOthersAudio`, `permitOthersAudio`, `forbidOthersVideo` and `permitOthersVideo`. +The example below shows a code snippet where a button is added to invoke the `forbidAudio` and `permitAudio` function to change media access state +for remote participants from an added dropdown that is populated by remote participants in the call. + + diff --git a/packages/storybook8/stories/Concepts/MediaAccess/snippets/MediaAccessComposite.snippet.tsx b/packages/storybook8/stories/Concepts/MediaAccess/snippets/MediaAccessComposite.snippet.tsx new file mode 100644 index 00000000000..6807f2808db --- /dev/null +++ b/packages/storybook8/stories/Concepts/MediaAccess/snippets/MediaAccessComposite.snippet.tsx @@ -0,0 +1,106 @@ +import { AzureCommunicationTokenCredential, CommunicationUserIdentifier } from '@azure/communication-common'; +import { + CallComposite, + CompositeLocale, + toFlatCommunicationIdentifier, + useAzureCommunicationCallAdapter +} from '@azure/communication-react'; +import { Dropdown, IDropdownOption, PartialTheme, PrimaryButton, Theme } from '@fluentui/react'; +import React, { useMemo, useState } from 'react'; + +export type ContainerProps = { + userId: CommunicationUserIdentifier; + token: string; + meetingLink: string; + formFactor?: 'desktop' | 'mobile'; + fluentTheme?: PartialTheme | Theme; + locale?: CompositeLocale; +}; + +export const ContosoCallContainer = (props: ContainerProps): JSX.Element => { + // Keep state of the selected participants to toggle audio + const [selectedParticipants, setSelectedParticipants] = useState([]); + + const credential = useMemo(() => { + try { + return new AzureCommunicationTokenCredential(props.token); + } catch { + console.error('Failed to construct token credential'); + return undefined; + } + }, [props.token]); + + const callAdapterArgs = useMemo( + () => ({ + userId: props.userId, + credential, + locator: { + meetingLink: props.meetingLink + } + }), + [props.userId, credential, props.meetingLink] + ); + + const adapter = useAzureCommunicationCallAdapter(callAdapterArgs); + + const participantsOptions = useMemo( + () => + Object.values(adapter?.getState().call?.remoteParticipants ?? {}).map((participant) => ({ + key: toFlatCommunicationIdentifier(participant.identifier), + text: participant.displayName ?? 'Unnamed participant' + })), + [adapter] + ); + + const onChange = (event: React.FormEvent, item?: IDropdownOption): void => { + if (item) { + setSelectedParticipants( + item.selected + ? [...selectedParticipants, item.key as string] + : selectedParticipants.filter((key) => key !== item.key) + ); + } + }; + + if (adapter) { + return ( +
+ + + { + if (selectedParticipants && selectedParticipants.length > 0) { + adapter.forbidAudio(selectedParticipants); + } + }} + disabled={!selectedParticipants || selectedParticipants.length === 0} + > + Disable mic for attendee(s) + + { + if (selectedParticipants && selectedParticipants.length > 0) { + adapter.permitAudio(selectedParticipants); + } + }} + disabled={!selectedParticipants || selectedParticipants.length === 0} + > + Enable mic for attendee(s) + +
+ ); + } + return <>Initializing...; +}; diff --git a/packages/storybook8/stories/Concepts/MediaAccess/snippets/MediaAccessMicCameraCapabilities.snippet.tsx b/packages/storybook8/stories/Concepts/MediaAccess/snippets/MediaAccessMicCameraCapabilities.snippet.tsx new file mode 100644 index 00000000000..ff16b3a386f --- /dev/null +++ b/packages/storybook8/stories/Concepts/MediaAccess/snippets/MediaAccessMicCameraCapabilities.snippet.tsx @@ -0,0 +1,86 @@ +import { CapabilitiesChangeInfo } from '@azure/communication-calling'; +import { AzureCommunicationTokenCredential, CommunicationUserIdentifier } from '@azure/communication-common'; +import { + CallAdapter, + CallComposite, + CallCompositeOptions, + CompositeLocale, + useAzureCommunicationCallAdapter +} from '@azure/communication-react'; +import { PartialTheme, Theme } from '@fluentui/react'; +import React, { useCallback, useMemo } from 'react'; + +export type ContainerProps = { + userId: CommunicationUserIdentifier; + token: string; + formFactor?: 'desktop' | 'mobile'; + fluentTheme?: PartialTheme | Theme; + locale?: CompositeLocale; + options?: CallCompositeOptions; + meetingLink?: string; +}; + +export const ContosoCallContainer = (props: ContainerProps): JSX.Element => { + const credential = useMemo(() => { + try { + return new AzureCommunicationTokenCredential(props.token); + } catch { + console.error('Failed to construct token credential'); + return undefined; + } + }, [props.token]); + + const callAdapterArgs = useMemo( + () => ({ + userId: props.userId, + credential, + locator: props.meetingLink + ? { + meetingLink: props.meetingLink + } + : undefined + }), + [props.userId, credential, props.meetingLink] + ); + + /** + * Logging local participants' Media access state with capabilitiesChanged event + * unmuteMic: true if the user can unmute the microphone, false otherwise + * turnVideoOn: true if the user can turn on the video, false otherwise + */ + const afterCallAdapterCreate = useCallback(async (adapter: CallAdapter): Promise => { + adapter.on('capabilitiesChanged', (capabilitiesChangeInfo: CapabilitiesChangeInfo) => { + if (capabilitiesChangeInfo.newValue.unmuteMic !== undefined) { + console.log('unmuteMic capabilities changed info: ', capabilitiesChangeInfo); + } + if (capabilitiesChangeInfo.newValue.turnVideoOn !== undefined) { + console.log('turnVideoOn capabilities changed info: ', capabilitiesChangeInfo); + } + }); + return adapter; + }, []); + + const adapter = useAzureCommunicationCallAdapter(callAdapterArgs, afterCallAdapterCreate); + + if (!props.meetingLink) { + return <>Teams meeting link is not provided.; + } + + if (adapter) { + return ( +
+ +
+ ); + } + if (credential === undefined) { + return <>Failed to construct credential. Provided token is malformed.; + } + return <>Initializing...; +}; diff --git a/packages/storybook8/stories/Concepts/MediaAccess/snippets/MediaAccessRemoteParticipants.snippet.tsx b/packages/storybook8/stories/Concepts/MediaAccess/snippets/MediaAccessRemoteParticipants.snippet.tsx new file mode 100644 index 00000000000..8e079cb0116 --- /dev/null +++ b/packages/storybook8/stories/Concepts/MediaAccess/snippets/MediaAccessRemoteParticipants.snippet.tsx @@ -0,0 +1,18 @@ +import { VideoGallery, usePropsFor } from '@azure/communication-react'; +import React from 'react'; + +export const CallScreen = (): JSX.Element => { + // Use usePropsFor to get properties for VideoGallery + const videoGalleryProps = usePropsFor(VideoGallery); + + // Logging remote participants' media access state without modifying the array + videoGalleryProps.remoteParticipants.forEach((participant) => { + console.log( + `Participant [${participant.userId}:${participant.displayName}]'s media access:`, + participant.mediaAccess + ); + }); + + // Display VideoGallery + return ; +};