@azure/communication-react 1.17.0-alpha-202405150013 → 1.17.0-alpha-202405170014

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/dist/communication-react.d.ts +33 -5
  2. package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-BkDaUOJU.js → ChatMessageComponentAsRichTextEditBox-BLFNaheX.js} +9 -3
  3. package/dist/dist-cjs/communication-react/ChatMessageComponentAsRichTextEditBox-BLFNaheX.js.map +1 -0
  4. package/dist/dist-cjs/communication-react/RichTextSendBoxWrapper-BhTpuspw.js +54 -0
  5. package/dist/dist-cjs/communication-react/RichTextSendBoxWrapper-BhTpuspw.js.map +1 -0
  6. package/dist/dist-cjs/communication-react/{index-DJswSfNy.js → index-C9I6Mcil.js} +291 -139
  7. package/dist/dist-cjs/communication-react/index-C9I6Mcil.js.map +1 -0
  8. package/dist/dist-cjs/communication-react/index.js +2 -2
  9. package/dist/dist-esm/acs-ui-common/src/common.d.ts +8 -1
  10. package/dist/dist-esm/acs-ui-common/src/common.js.map +1 -1
  11. package/dist/dist-esm/acs-ui-common/src/index.d.ts +1 -1
  12. package/dist/dist-esm/acs-ui-common/src/index.js.map +1 -1
  13. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  14. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  15. package/dist/dist-esm/calling-component-bindings/src/utils/videoGalleryUtils.js +1 -6
  16. package/dist/dist-esm/calling-component-bindings/src/utils/videoGalleryUtils.js.map +1 -1
  17. package/dist/dist-esm/calling-component-bindings/src/videoGallerySelector.js +1 -1
  18. package/dist/dist-esm/calling-component-bindings/src/videoGallerySelector.js.map +1 -1
  19. package/dist/dist-esm/calling-stateful-client/src/CallClientState.d.ts +1 -1
  20. package/dist/dist-esm/calling-stateful-client/src/CallClientState.js.map +1 -1
  21. package/dist/dist-esm/calling-stateful-client/src/CallContext.js +0 -4
  22. package/dist/dist-esm/calling-stateful-client/src/CallContext.js.map +1 -1
  23. package/dist/dist-esm/calling-stateful-client/src/CallSubscriber.js +0 -3
  24. package/dist/dist-esm/calling-stateful-client/src/CallSubscriber.js.map +1 -1
  25. package/dist/dist-esm/calling-stateful-client/src/Converter.js +0 -1
  26. package/dist/dist-esm/calling-stateful-client/src/Converter.js.map +1 -1
  27. package/dist/dist-esm/calling-stateful-client/src/PPTLiveSubscriber.js +0 -2
  28. package/dist/dist-esm/calling-stateful-client/src/PPTLiveSubscriber.js.map +1 -1
  29. package/dist/dist-esm/calling-stateful-client/src/index-public.js.map +1 -1
  30. package/dist/dist-esm/communication-react/src/index.d.ts +1 -1
  31. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  32. package/dist/dist-esm/react-components/src/components/Attachment/AttachmentCard.d.ts +4 -0
  33. package/dist/dist-esm/react-components/src/components/Attachment/AttachmentCard.js +27 -22
  34. package/dist/dist-esm/react-components/src/components/Attachment/AttachmentCard.js.map +1 -1
  35. package/dist/dist-esm/react-components/src/components/Attachment/AttachmentCardGroup.d.ts +15 -0
  36. package/dist/dist-esm/react-components/src/components/Attachment/AttachmentCardGroup.js +14 -16
  37. package/dist/dist-esm/react-components/src/components/Attachment/AttachmentCardGroup.js.map +1 -1
  38. package/dist/dist-esm/react-components/src/components/Attachment/AttachmentDownloadCards.js +16 -15
  39. package/dist/dist-esm/react-components/src/components/Attachment/AttachmentDownloadCards.js.map +1 -1
  40. package/dist/dist-esm/react-components/src/components/Attachment/AttachmentUploadCards.js +2 -2
  41. package/dist/dist-esm/react-components/src/components/Attachment/AttachmentUploadCards.js.map +1 -1
  42. package/dist/dist-esm/react-components/src/components/ChatMessage/MessageComponents/ChatMessageComponentAsMessageBubble.js +9 -1
  43. package/dist/dist-esm/react-components/src/components/ChatMessage/MessageComponents/ChatMessageComponentAsMessageBubble.js.map +1 -1
  44. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsEditBox.js +8 -2
  45. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsEditBox.js.map +1 -1
  46. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsEditBoxPicker.js +2 -2
  47. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsEditBoxPicker.js.map +1 -1
  48. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsRichTextEditBox.js +8 -2
  49. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsRichTextEditBox.js.map +1 -1
  50. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponentAsMessageBubble.js +9 -1
  51. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponentAsMessageBubble.js.map +1 -1
  52. package/dist/dist-esm/react-components/src/components/ErrorBoundary.d.ts +2 -2
  53. package/dist/dist-esm/react-components/src/components/ErrorBoundary.js +2 -2
  54. package/dist/dist-esm/react-components/src/components/ErrorBoundary.js.map +1 -1
  55. package/dist/dist-esm/react-components/src/components/MessageThread.d.ts +5 -3
  56. package/dist/dist-esm/react-components/src/components/MessageThread.js.map +1 -1
  57. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.js +1 -1
  58. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.js.map +1 -1
  59. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.d.ts +4 -0
  60. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.js +5 -2
  61. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.js.map +1 -1
  62. package/dist/dist-esm/react-components/src/components/SendBox.js +5 -2
  63. package/dist/dist-esm/react-components/src/components/SendBox.js.map +1 -1
  64. package/dist/dist-esm/react-components/src/components/VideoEffects/VideoEffectsItem.js +6 -4
  65. package/dist/dist-esm/react-components/src/components/VideoEffects/VideoEffectsItem.js.map +1 -1
  66. package/dist/dist-esm/react-components/src/components/VideoGallery/RemoteScreenShare.js +3 -6
  67. package/dist/dist-esm/react-components/src/components/VideoGallery/RemoteScreenShare.js.map +1 -1
  68. package/dist/dist-esm/react-components/src/components/VideoGallery.js +1 -3
  69. package/dist/dist-esm/react-components/src/components/VideoGallery.js.map +1 -1
  70. package/dist/dist-esm/react-components/src/components/VideoTile.js +0 -1
  71. package/dist/dist-esm/react-components/src/components/VideoTile.js.map +1 -1
  72. package/dist/dist-esm/react-components/src/components/index.d.ts +1 -0
  73. package/dist/dist-esm/react-components/src/components/index.js +1 -0
  74. package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
  75. package/dist/dist-esm/react-components/src/components/styles/AttachmentCard.styles.d.ts +9 -1
  76. package/dist/dist-esm/react-components/src/components/styles/AttachmentCard.styles.js +27 -3
  77. package/dist/dist-esm/react-components/src/components/styles/AttachmentCard.styles.js.map +1 -1
  78. package/dist/dist-esm/react-components/src/components/styles/AttachmentCardGroup.styles.d.ts +17 -0
  79. package/dist/dist-esm/react-components/src/components/styles/AttachmentCardGroup.styles.js +47 -0
  80. package/dist/dist-esm/react-components/src/components/styles/AttachmentCardGroup.styles.js.map +1 -0
  81. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.d.ts +2 -2
  82. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js +8 -0
  83. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js.map +1 -1
  84. package/dist/dist-esm/react-components/src/components/utils/ChatMessageComponentAsEditBoxUtils.d.ts +4 -0
  85. package/dist/dist-esm/react-components/src/components/utils/ChatMessageComponentAsEditBoxUtils.js +9 -0
  86. package/dist/dist-esm/react-components/src/components/utils/ChatMessageComponentAsEditBoxUtils.js.map +1 -1
  87. package/dist/dist-esm/react-components/src/localization/locales/ar-SA/strings.json +22 -1
  88. package/dist/dist-esm/react-components/src/localization/locales/cs-CZ/strings.json +22 -1
  89. package/dist/dist-esm/react-components/src/localization/locales/de-DE/strings.json +22 -1
  90. package/dist/dist-esm/react-components/src/localization/locales/en-GB/strings.json +22 -1
  91. package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +3 -1
  92. package/dist/dist-esm/react-components/src/localization/locales/es-ES/strings.json +22 -1
  93. package/dist/dist-esm/react-components/src/localization/locales/fi-FI/strings.json +23 -2
  94. package/dist/dist-esm/react-components/src/localization/locales/fr-FR/strings.json +31 -10
  95. package/dist/dist-esm/react-components/src/localization/locales/he-IL/strings.json +22 -1
  96. package/dist/dist-esm/react-components/src/localization/locales/it-IT/strings.json +22 -1
  97. package/dist/dist-esm/react-components/src/localization/locales/ja-JP/strings.json +31 -10
  98. package/dist/dist-esm/react-components/src/localization/locales/ko-KR/strings.json +31 -10
  99. package/dist/dist-esm/react-components/src/localization/locales/nb-NO/strings.json +22 -1
  100. package/dist/dist-esm/react-components/src/localization/locales/nl-NL/strings.json +22 -1
  101. package/dist/dist-esm/react-components/src/localization/locales/pl-PL/strings.json +22 -1
  102. package/dist/dist-esm/react-components/src/localization/locales/pt-BR/strings.json +31 -10
  103. package/dist/dist-esm/react-components/src/localization/locales/ru-RU/strings.json +22 -1
  104. package/dist/dist-esm/react-components/src/localization/locales/sv-SE/strings.json +22 -1
  105. package/dist/dist-esm/react-components/src/localization/locales/tr-TR/strings.json +22 -1
  106. package/dist/dist-esm/react-components/src/localization/locales/zh-CN/strings.json +30 -9
  107. package/dist/dist-esm/react-components/src/localization/locales/zh-TW/strings.json +24 -3
  108. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.d.ts +7 -0
  109. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js +6 -2
  110. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
  111. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatComposite.d.ts +7 -0
  112. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatComposite.js.map +1 -1
  113. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js +28 -8
  114. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js.map +1 -1
  115. package/dist/dist-esm/react-composites/src/composites/common/RichTextSendBoxWrapper.d.ts +10 -0
  116. package/dist/dist-esm/react-composites/src/composites/common/RichTextSendBoxWrapper.js +20 -0
  117. package/dist/dist-esm/react-composites/src/composites/common/RichTextSendBoxWrapper.js.map +1 -0
  118. package/dist/dist-esm/react-composites/src/composites/common/SendBoxPicker.d.ts +30 -0
  119. package/dist/dist-esm/react-composites/src/composites/common/SendBoxPicker.js +44 -0
  120. package/dist/dist-esm/react-composites/src/composites/common/SendBoxPicker.js.map +1 -0
  121. package/dist/dist-esm/react-composites/src/composites/localization/locales/ar-SA/strings.json +4 -0
  122. package/dist/dist-esm/react-composites/src/composites/localization/locales/cs-CZ/strings.json +4 -0
  123. package/dist/dist-esm/react-composites/src/composites/localization/locales/de-DE/strings.json +4 -0
  124. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-GB/strings.json +4 -0
  125. package/dist/dist-esm/react-composites/src/composites/localization/locales/es-ES/strings.json +4 -0
  126. package/dist/dist-esm/react-composites/src/composites/localization/locales/fi-FI/strings.json +4 -0
  127. package/dist/dist-esm/react-composites/src/composites/localization/locales/fr-FR/strings.json +4 -0
  128. package/dist/dist-esm/react-composites/src/composites/localization/locales/he-IL/strings.json +4 -0
  129. package/dist/dist-esm/react-composites/src/composites/localization/locales/it-IT/strings.json +4 -0
  130. package/dist/dist-esm/react-composites/src/composites/localization/locales/ja-JP/strings.json +4 -0
  131. package/dist/dist-esm/react-composites/src/composites/localization/locales/ko-KR/strings.json +4 -0
  132. package/dist/dist-esm/react-composites/src/composites/localization/locales/nb-NO/strings.json +4 -0
  133. package/dist/dist-esm/react-composites/src/composites/localization/locales/nl-NL/strings.json +4 -0
  134. package/dist/dist-esm/react-composites/src/composites/localization/locales/pl-PL/strings.json +4 -0
  135. package/dist/dist-esm/react-composites/src/composites/localization/locales/pt-BR/strings.json +4 -0
  136. package/dist/dist-esm/react-composites/src/composites/localization/locales/ru-RU/strings.json +4 -0
  137. package/dist/dist-esm/react-composites/src/composites/localization/locales/sv-SE/strings.json +4 -0
  138. package/dist/dist-esm/react-composites/src/composites/localization/locales/tr-TR/strings.json +4 -0
  139. package/dist/dist-esm/react-composites/src/composites/localization/locales/zh-CN/strings.json +4 -0
  140. package/dist/dist-esm/react-composites/src/composites/localization/locales/zh-TW/strings.json +4 -0
  141. package/package.json +2 -2
  142. package/dist/dist-cjs/communication-react/ChatMessageComponentAsRichTextEditBox-BkDaUOJU.js.map +0 -1
  143. package/dist/dist-cjs/communication-react/index-DJswSfNy.js.map +0 -1
@@ -57,6 +57,7 @@
57
57
  "richTextDeleteColumnMenu": "Usuń kolumnę",
58
58
  "richTextDeleteRowMenu": "Usuń wiersz",
59
59
  "richTextDeleteTableMenu": "Usuń tabelę",
60
+ "richTextToolbarMoreButtonAriaLabel": "More options",
60
61
  "attachmentMoreMenu": "Więcej opcji"
61
62
  },
62
63
  "mentionPopover": {
@@ -199,7 +200,27 @@
199
200
  "blockedWarningText": "Ta wiadomość została usunięta ze względu na zasady organizacyjne.",
200
201
  "blockedWarningLinkText": "Szczegóły",
201
202
  "attachmentCardGroupMessage": "Wiadomość ma {attachmentCount} załącznik",
202
- "messageDeletedAnnouncementAriaLabel": "Wiadomość została usunięta"
203
+ "messageDeletedAnnouncementAriaLabel": "Wiadomość została usunięta",
204
+ "richTextBoldTooltip": "Pogrubienie",
205
+ "richTextItalicTooltip": "Kursywa",
206
+ "richTextUnderlineTooltip": "Podkreślenie",
207
+ "richTextBulletListTooltip": "Lista punktowana",
208
+ "richTextNumberListTooltip": "Lista numerowana",
209
+ "richTextIncreaseIndentTooltip": "Zwiększ wcięcie",
210
+ "richTextDecreaseIndentTooltip": "Zmniejsz wcięcie",
211
+ "richTextInsertTableTooltip": "Wstaw tabelę",
212
+ "richTextFormatButtonTooltip": "Formatowanie",
213
+ "richTextInsertRowOrColumnMenu": "Wstaw",
214
+ "richTextInsertTableMenuTitle": "Wstaw tabelę {column} x {row}",
215
+ "richTextInsertRowAboveMenu": "Wstaw powyżej",
216
+ "richTextInsertRowBelowMenu": "Wstaw poniżej",
217
+ "richTextInsertColumnLeftMenu": "Wstaw z lewej",
218
+ "richTextInsertColumnRightMenu": "Wstaw z prawej",
219
+ "richTextDeleteRowOrColumnMenu": "Usuń",
220
+ "richTextDeleteColumnMenu": "Usuń kolumnę",
221
+ "richTextDeleteRowMenu": "Usuń wiersz",
222
+ "richTextDeleteTableMenu": "Usuń tabelę",
223
+ "richTextToolbarMoreButtonAriaLabel": "More options"
203
224
  },
204
225
  "errorBar": {
205
226
  "unableToReachChatService": "Jesteś w trybie offline",
@@ -38,25 +38,26 @@
38
38
  "removeAttachment": "Remover arquivo",
39
39
  "uploading": "Carregando",
40
40
  "uploadCompleted": "Carregamento concluído",
41
- "richTextBoldTooltip": "Negrito",
41
+ "richTextBoldTooltip": "Bold",
42
42
  "richTextItalicTooltip": "Itálico",
43
43
  "richTextUnderlineTooltip": "Sublinhar",
44
- "richTextBulletListTooltip": "Lista com marcadores",
44
+ "richTextBulletListTooltip": "Bulleted list",
45
45
  "richTextNumberListTooltip": "Lista numerada",
46
- "richTextIncreaseIndentTooltip": "Aumentar recuo",
47
- "richTextDecreaseIndentTooltip": "Diminuir recuo",
48
- "richTextInsertTableTooltip": "Inserir tabela",
46
+ "richTextIncreaseIndentTooltip": "Increase indent",
47
+ "richTextDecreaseIndentTooltip": "Decrease indent",
48
+ "richTextInsertTableTooltip": "Insert table",
49
49
  "richTextFormatButtonTooltip": "Formato",
50
50
  "richTextInsertRowOrColumnMenu": "Inserir",
51
51
  "richTextInsertTableMenuTitle": "Inserir tabela {column} x {row}",
52
52
  "richTextInsertRowAboveMenu": "Inserir acima",
53
53
  "richTextInsertRowBelowMenu": "Inserir abaixo",
54
- "richTextInsertColumnLeftMenu": "Inserir à esquerda",
55
- "richTextInsertColumnRightMenu": "Inserir à direita",
54
+ "richTextInsertColumnLeftMenu": "Insert left",
55
+ "richTextInsertColumnRightMenu": "Insert right",
56
56
  "richTextDeleteRowOrColumnMenu": "Excluir",
57
- "richTextDeleteColumnMenu": "Excluir coluna",
58
- "richTextDeleteRowMenu": "Excluir linha",
57
+ "richTextDeleteColumnMenu": "Delete column",
58
+ "richTextDeleteRowMenu": "Delete row",
59
59
  "richTextDeleteTableMenu": "Excluir tabela",
60
+ "richTextToolbarMoreButtonAriaLabel": "More options",
60
61
  "attachmentMoreMenu": "Mais Opções"
61
62
  },
62
63
  "mentionPopover": {
@@ -199,7 +200,27 @@
199
200
  "blockedWarningText": "Esta mensagem foi excluída devido à política organizacional.",
200
201
  "blockedWarningLinkText": "Detalhes",
201
202
  "attachmentCardGroupMessage": "A mensagem tem {attachmentCount} anexo",
202
- "messageDeletedAnnouncementAriaLabel": "A mensagem foi excluída"
203
+ "messageDeletedAnnouncementAriaLabel": "A mensagem foi excluída",
204
+ "richTextBoldTooltip": "Negrito",
205
+ "richTextItalicTooltip": "Italic",
206
+ "richTextUnderlineTooltip": "Underline",
207
+ "richTextBulletListTooltip": "Lista com marcadores",
208
+ "richTextNumberListTooltip": "Numbered list",
209
+ "richTextIncreaseIndentTooltip": "Aumentar recuo",
210
+ "richTextDecreaseIndentTooltip": "Diminuir recuo",
211
+ "richTextInsertTableTooltip": "Inserir tabela",
212
+ "richTextFormatButtonTooltip": "Format",
213
+ "richTextInsertRowOrColumnMenu": "Insert",
214
+ "richTextInsertTableMenuTitle": "Inserir tabela {column} x {row}",
215
+ "richTextInsertRowAboveMenu": "Insert above",
216
+ "richTextInsertRowBelowMenu": "Insert below",
217
+ "richTextInsertColumnLeftMenu": "Inserir à esquerda",
218
+ "richTextInsertColumnRightMenu": "Inserir à direita",
219
+ "richTextDeleteRowOrColumnMenu": "Delete",
220
+ "richTextDeleteColumnMenu": "Excluir coluna",
221
+ "richTextDeleteRowMenu": "Excluir linha",
222
+ "richTextDeleteTableMenu": "Delete table",
223
+ "richTextToolbarMoreButtonAriaLabel": "More options"
203
224
  },
204
225
  "errorBar": {
205
226
  "unableToReachChatService": "Você está offline",
@@ -57,6 +57,7 @@
57
57
  "richTextDeleteColumnMenu": "Удалить столбец",
58
58
  "richTextDeleteRowMenu": "Удалить строку",
59
59
  "richTextDeleteTableMenu": "Удалить таблицу",
60
+ "richTextToolbarMoreButtonAriaLabel": "More options",
60
61
  "attachmentMoreMenu": "Дополнительные параметры"
61
62
  },
62
63
  "mentionPopover": {
@@ -199,7 +200,27 @@
199
200
  "blockedWarningText": "Это сообщение было удалено политикой организации.",
200
201
  "blockedWarningLinkText": "Сведения",
201
202
  "attachmentCardGroupMessage": "Сообщение содержит {attachmentCount} вложение",
202
- "messageDeletedAnnouncementAriaLabel": "Сообщение удалено"
203
+ "messageDeletedAnnouncementAriaLabel": "Сообщение удалено",
204
+ "richTextBoldTooltip": "Полужирный",
205
+ "richTextItalicTooltip": "Курсив",
206
+ "richTextUnderlineTooltip": "Подчеркнутый",
207
+ "richTextBulletListTooltip": "Маркированный список",
208
+ "richTextNumberListTooltip": "Нумерованный список",
209
+ "richTextIncreaseIndentTooltip": "Увеличить отступ",
210
+ "richTextDecreaseIndentTooltip": "Уменьшить отступ",
211
+ "richTextInsertTableTooltip": "Вставить таблицу",
212
+ "richTextFormatButtonTooltip": "Форматирование",
213
+ "richTextInsertRowOrColumnMenu": "Вставить",
214
+ "richTextInsertTableMenuTitle": "Вставить таблицу {column} x {row}",
215
+ "richTextInsertRowAboveMenu": "Вставить сверху",
216
+ "richTextInsertRowBelowMenu": "Вставить снизу",
217
+ "richTextInsertColumnLeftMenu": "Вставить слева",
218
+ "richTextInsertColumnRightMenu": "Вставить справа",
219
+ "richTextDeleteRowOrColumnMenu": "Удалить",
220
+ "richTextDeleteColumnMenu": "Удалить столбец",
221
+ "richTextDeleteRowMenu": "Удалить строку",
222
+ "richTextDeleteTableMenu": "Удалить таблицу",
223
+ "richTextToolbarMoreButtonAriaLabel": "More options"
203
224
  },
204
225
  "errorBar": {
205
226
  "unableToReachChatService": "Вы не в сети",
@@ -57,6 +57,7 @@
57
57
  "richTextDeleteColumnMenu": "Ta bort kolumn",
58
58
  "richTextDeleteRowMenu": "Ta bort rad",
59
59
  "richTextDeleteTableMenu": "Ta bort tabell",
60
+ "richTextToolbarMoreButtonAriaLabel": "More options",
60
61
  "attachmentMoreMenu": "Fler alternativ"
61
62
  },
62
63
  "mentionPopover": {
@@ -199,7 +200,27 @@
199
200
  "blockedWarningText": "Det här meddelandet har tagits bort på grund av en organisationsprincip.",
200
201
  "blockedWarningLinkText": "Information",
201
202
  "attachmentCardGroupMessage": "Meddelandet har {attachmentCount} bifogade filer.",
202
- "messageDeletedAnnouncementAriaLabel": "Meddelandet har tagits bort"
203
+ "messageDeletedAnnouncementAriaLabel": "Meddelandet har tagits bort",
204
+ "richTextBoldTooltip": "Fet",
205
+ "richTextItalicTooltip": "Kursiv",
206
+ "richTextUnderlineTooltip": "Understryka",
207
+ "richTextBulletListTooltip": "Punktlista",
208
+ "richTextNumberListTooltip": "Numrerad lista",
209
+ "richTextIncreaseIndentTooltip": "Öka indrag",
210
+ "richTextDecreaseIndentTooltip": "Minska indrag",
211
+ "richTextInsertTableTooltip": "Infoga tabell",
212
+ "richTextFormatButtonTooltip": "Format",
213
+ "richTextInsertRowOrColumnMenu": "Infoga",
214
+ "richTextInsertTableMenuTitle": "Infoga tabell på {column} x {row}",
215
+ "richTextInsertRowAboveMenu": "Infoga ovan",
216
+ "richTextInsertRowBelowMenu": "Infoga nedanför",
217
+ "richTextInsertColumnLeftMenu": "Infoga till vänster",
218
+ "richTextInsertColumnRightMenu": "Infoga till höger",
219
+ "richTextDeleteRowOrColumnMenu": "Radera",
220
+ "richTextDeleteColumnMenu": "Ta bort kolumn",
221
+ "richTextDeleteRowMenu": "Ta bort rad",
222
+ "richTextDeleteTableMenu": "Ta bort tabell",
223
+ "richTextToolbarMoreButtonAriaLabel": "More options"
203
224
  },
204
225
  "errorBar": {
205
226
  "unableToReachChatService": "Du är offline",
@@ -57,6 +57,7 @@
57
57
  "richTextDeleteColumnMenu": "Sütunu sil",
58
58
  "richTextDeleteRowMenu": "Satırı sil",
59
59
  "richTextDeleteTableMenu": "Tabloyu sil",
60
+ "richTextToolbarMoreButtonAriaLabel": "More options",
60
61
  "attachmentMoreMenu": "Diğer Seçenekler"
61
62
  },
62
63
  "mentionPopover": {
@@ -199,7 +200,27 @@
199
200
  "blockedWarningText": "Bu ileti kuruluş ilkesi nedeniyle silindi.",
200
201
  "blockedWarningLinkText": "Ayrıntılar",
201
202
  "attachmentCardGroupMessage": "İletinin {attachmentCount} eki var",
202
- "messageDeletedAnnouncementAriaLabel": "İleti silindi"
203
+ "messageDeletedAnnouncementAriaLabel": "İleti silindi",
204
+ "richTextBoldTooltip": "Kalın",
205
+ "richTextItalicTooltip": "İtalik",
206
+ "richTextUnderlineTooltip": "Altını Çiz",
207
+ "richTextBulletListTooltip": "Madde işaretli liste",
208
+ "richTextNumberListTooltip": "Numaralandırılmış liste",
209
+ "richTextIncreaseIndentTooltip": "Girintiyi artır",
210
+ "richTextDecreaseIndentTooltip": "Girintiyi azalt",
211
+ "richTextInsertTableTooltip": "Tablo ekle",
212
+ "richTextFormatButtonTooltip": "Biçim",
213
+ "richTextInsertRowOrColumnMenu": "Ekle",
214
+ "richTextInsertTableMenuTitle": "{column} x {row} tablosunu ekleme",
215
+ "richTextInsertRowAboveMenu": "Üste ekle",
216
+ "richTextInsertRowBelowMenu": "Aşağıya ekle",
217
+ "richTextInsertColumnLeftMenu": "Sola ekle",
218
+ "richTextInsertColumnRightMenu": "Sağa ekle",
219
+ "richTextDeleteRowOrColumnMenu": "Sil",
220
+ "richTextDeleteColumnMenu": "Sütunu sil",
221
+ "richTextDeleteRowMenu": "Satırı sil",
222
+ "richTextDeleteTableMenu": "Tabloyu sil",
223
+ "richTextToolbarMoreButtonAriaLabel": "More options"
203
224
  },
204
225
  "errorBar": {
205
226
  "unableToReachChatService": "Çevrimdışısınız",
@@ -7,11 +7,11 @@
7
7
  "mutedIconLabel": "已静音",
8
8
  "displayNamePlaceholder": "未命名的参与者",
9
9
  "participantStateRinging": "正在呼叫...",
10
- "participantStateHold": "待机音乐",
10
+ "participantStateHold": "保留",
11
11
  "attendeeRole": "与会者"
12
12
  },
13
13
  "ParticipantList": {
14
- "overflowParticipantCount": "+{overflowCount} "
14
+ "overflowParticipantCount": "和另外 {overflowCount} "
15
15
  },
16
16
  "typingIndicator": {
17
17
  "singleUser": "{user} 正在键入...",
@@ -34,7 +34,7 @@
34
34
  "placeholderText": "输入消息",
35
35
  "textTooLong": "你的消息长度超过了最大限制。",
36
36
  "sendButtonAriaLabel": "发送信息",
37
- "attachmentUploadsPendingError": "正在上传...请稍等。",
37
+ "attachmentUploadsPendingError": "正在上传...请稍候。",
38
38
  "removeAttachment": "删除文件",
39
39
  "uploading": "正在上传",
40
40
  "uploadCompleted": "已完成上传",
@@ -57,6 +57,7 @@
57
57
  "richTextDeleteColumnMenu": "删除列",
58
58
  "richTextDeleteRowMenu": "删除行",
59
59
  "richTextDeleteTableMenu": "删除表格",
60
+ "richTextToolbarMoreButtonAriaLabel": "More options",
60
61
  "attachmentMoreMenu": "更多选项"
61
62
  },
62
63
  "mentionPopover": {
@@ -198,8 +199,28 @@
198
199
  "openAttachment": "打开文件",
199
200
  "blockedWarningText": "由于组织策略,此消息已被删除。",
200
201
  "blockedWarningLinkText": "详细信息",
201
- "attachmentCardGroupMessage": "该邮件包含 {attachmentCount} 个附件",
202
- "messageDeletedAnnouncementAriaLabel": "邮件已删除"
202
+ "attachmentCardGroupMessage": "该消息包含 {attachmentCount} 个附件",
203
+ "messageDeletedAnnouncementAriaLabel": "消息已删除",
204
+ "richTextBoldTooltip": "粗体",
205
+ "richTextItalicTooltip": "斜体",
206
+ "richTextUnderlineTooltip": "下划线",
207
+ "richTextBulletListTooltip": "项目符号列表",
208
+ "richTextNumberListTooltip": "编号列表",
209
+ "richTextIncreaseIndentTooltip": "增加缩进量",
210
+ "richTextDecreaseIndentTooltip": "减少缩进量",
211
+ "richTextInsertTableTooltip": "插入表格",
212
+ "richTextFormatButtonTooltip": "格式",
213
+ "richTextInsertRowOrColumnMenu": "插入",
214
+ "richTextInsertTableMenuTitle": "插入 {column} x {row} 表",
215
+ "richTextInsertRowAboveMenu": "在上方插入",
216
+ "richTextInsertRowBelowMenu": "在下方插入",
217
+ "richTextInsertColumnLeftMenu": "在左侧插入",
218
+ "richTextInsertColumnRightMenu": "在右侧插入",
219
+ "richTextDeleteRowOrColumnMenu": "删除",
220
+ "richTextDeleteColumnMenu": "删除列",
221
+ "richTextDeleteRowMenu": "删除行",
222
+ "richTextDeleteTableMenu": "删除表格",
223
+ "richTextToolbarMoreButtonAriaLabel": "More options"
203
224
  },
204
225
  "errorBar": {
205
226
  "unableToReachChatService": "你已脱机",
@@ -223,7 +244,7 @@
223
244
  "callMicrophoneMutedBySystem": "系统已将你设为静音。",
224
245
  "callMicrophoneUnmutedBySystem": "你的麦克风已恢复,系统已取消静音。",
225
246
  "callMacOsMicrophoneAccessDenied": "无法访问麦克风。在 macOS 隐私设置中授予麦克风权限。",
226
- "callLocalVideoFreeze": "网络带宽较差。你的视频可能会在通话中为其他人暂停。",
247
+ "callLocalVideoFreeze": "网络带宽较差。你的视频在会议中的其他人看来可能会卡顿。",
227
248
  "callCameraAccessDenied": "无法访问照相机。单击地址栏中的锁定以授予对此网页的权限。",
228
249
  "callCameraAccessDeniedSafari": "无法访问照相机。刷新页面以允许权限,或检查此浏览器的设置并验证是否为此网站启用了权限。",
229
250
  "callCameraAlreadyInUse": "无法访问照相机。它可能已被其他应用程序使用。",
@@ -236,14 +257,14 @@
236
257
  "failedToJoinCallInvalidMeetingLink": "无法加入会议。无效的链接。",
237
258
  "cameraFrozenForRemoteParticipants": "通话中的用户在查看视频时遇到问题。请检查你的设备和网络。",
238
259
  "unableToStartVideoEffect": "无法应用视频效果。",
239
- "startSpotlightWhileMaxParticipantsAreSpotlighted": "无法开发聚焦参与者,因为聚焦的参与者人数已达到上限。"
260
+ "startSpotlightWhileMaxParticipantsAreSpotlighted": "无法聚焦参与者,因为聚焦的参与者人数已达到上限。"
240
261
  },
241
262
  "videoGallery": {
242
263
  "screenIsBeingSharedMessage": "你正在共享你的屏幕",
243
264
  "screenShareLoadingMessage": "正在加载 {participant} 的屏幕",
244
265
  "localVideoLabel": "你",
245
266
  "localVideoCameraSwitcherLabel": "切换相机",
246
- "localVideoMovementLabel": "可移动本地视频磁贴",
267
+ "localVideoMovementLabel": "可移动本地小窗视频",
247
268
  "localVideoSelectedDescription": "已选择 {cameraName}",
248
269
  "displayNamePlaceholder": "未命名的参与者",
249
270
  "fitRemoteParticipantToFrame": "适应帧大小",
@@ -274,7 +295,7 @@
274
295
  },
275
296
  "videoTile": {
276
297
  "participantStateRinging": "正在呼叫...",
277
- "participantStateHold": "待机音乐"
298
+ "participantStateHold": "保留"
278
299
  },
279
300
  "CameraAndMicrophoneSitePermissionsRequest": {
280
301
  "primaryText": "允许{appName}使用你的相机和麦克风",
@@ -11,7 +11,7 @@
11
11
  "attendeeRole": "出席者"
12
12
  },
13
13
  "ParticipantList": {
14
- "overflowParticipantCount": "其他 {overflowCount} 個"
14
+ "overflowParticipantCount": "多出 {overflowCount} 個"
15
15
  },
16
16
  "typingIndicator": {
17
17
  "singleUser": "{user} 正在輸入...",
@@ -57,6 +57,7 @@
57
57
  "richTextDeleteColumnMenu": "刪除欄",
58
58
  "richTextDeleteRowMenu": "刪除列",
59
59
  "richTextDeleteTableMenu": "刪除表格",
60
+ "richTextToolbarMoreButtonAriaLabel": "More options",
60
61
  "attachmentMoreMenu": "其他選項"
61
62
  },
62
63
  "mentionPopover": {
@@ -199,7 +200,27 @@
199
200
  "blockedWarningText": "由於組織原則,已刪除此訊息。",
200
201
  "blockedWarningLinkText": "詳細資料",
201
202
  "attachmentCardGroupMessage": "這則訊息有 {attachmentCount} 個附件",
202
- "messageDeletedAnnouncementAriaLabel": "訊息已刪除"
203
+ "messageDeletedAnnouncementAriaLabel": "訊息已刪除",
204
+ "richTextBoldTooltip": "粗體",
205
+ "richTextItalicTooltip": "斜體",
206
+ "richTextUnderlineTooltip": "底線",
207
+ "richTextBulletListTooltip": "項目符號清單",
208
+ "richTextNumberListTooltip": "編號清單",
209
+ "richTextIncreaseIndentTooltip": "增加縮排",
210
+ "richTextDecreaseIndentTooltip": "減少縮排",
211
+ "richTextInsertTableTooltip": "插入表格",
212
+ "richTextFormatButtonTooltip": "格式",
213
+ "richTextInsertRowOrColumnMenu": "插入",
214
+ "richTextInsertTableMenuTitle": "插入 {column} x {row} 表格",
215
+ "richTextInsertRowAboveMenu": "在上方插入",
216
+ "richTextInsertRowBelowMenu": "在下方插入",
217
+ "richTextInsertColumnLeftMenu": "於左方插入",
218
+ "richTextInsertColumnRightMenu": "於右方插入",
219
+ "richTextDeleteRowOrColumnMenu": "刪除",
220
+ "richTextDeleteColumnMenu": "刪除欄",
221
+ "richTextDeleteRowMenu": "刪除列",
222
+ "richTextDeleteTableMenu": "刪除表格",
223
+ "richTextToolbarMoreButtonAriaLabel": "More options"
203
224
  },
204
225
  "errorBar": {
205
226
  "unableToReachChatService": "您處於離線狀態",
@@ -243,7 +264,7 @@
243
264
  "screenShareLoadingMessage": "正在載入 {participant} 的螢幕畫面",
244
265
  "localVideoLabel": "您",
245
266
  "localVideoCameraSwitcherLabel": "切換相機",
246
- "localVideoMovementLabel": "可移動的本機影片磚",
267
+ "localVideoMovementLabel": "可移動本機視訊磚",
247
268
  "localVideoSelectedDescription": "已選取 {cameraName}",
248
269
  "displayNamePlaceholder": "未命名的參與者",
249
270
  "fitRemoteParticipantToFrame": "調整成畫面大小",
@@ -222,6 +222,13 @@ export type CallWithChatCompositeOptions = {
222
222
  */
223
223
  hideSpotlightButtons?: boolean;
224
224
  };
225
+ /**
226
+ * enables rich text editor for the edit box
227
+ * @defaultValue `false`
228
+ *
229
+ * @beta
230
+ */
231
+ richTextEditor?: boolean;
225
232
  };
226
233
  /**
227
234
  * CallWithChatComposite brings together key components to provide a full call with chat experience out of the box.
@@ -171,11 +171,15 @@ const CallWithChatScreen = (props) => {
171
171
  /* @conditional-compile-remove(chat-composite-participant-pane) */
172
172
  participantPane: false,
173
173
  /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
174
- attachmentOptions: props.attachmentOptions
174
+ attachmentOptions: props.attachmentOptions,
175
+ /* @conditional-compile-remove(rich-text-editor-composite-support) */
176
+ richTextEditor: props.richTextEditor
175
177
  }, onFetchAvatarPersonaData: props.onFetchAvatarPersonaData })), [
176
178
  chatAdapter,
177
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ props.attachmentOptions,
179
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
180
+ props.attachmentOptions,
178
181
  props.onFetchAvatarPersonaData,
182
+ /* @conditional-compile-remove(rich-text-editor-composite-support) */ props.richTextEditor,
179
183
  theme
180
184
  ]);
181
185
  const sidePaneHeaderRenderer = useCallback(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"CallWithChatComposite.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { useCallback, useState, useMemo, useEffect, useRef } from 'react';\nimport { mergeStyles, PartialTheme, Stack, Theme } from '@fluentui/react';\nimport { CallCompositePage } from '../CallComposite';\n/* @conditional-compile-remove(end-of-call-survey) */\nimport { CallSurvey } from '@azure/communication-calling';\nimport { CallState } from '@azure/communication-calling';\nimport { callCompositeContainerStyles, compositeOuterContainerStyles } from './styles/CallWithChatCompositeStyles';\nimport { CallWithChatAdapter } from './adapter/CallWithChatAdapter';\nimport { CallWithChatBackedCallAdapter } from './adapter/CallWithChatBackedCallAdapter';\nimport { CallWithChatBackedChatAdapter } from './adapter/CallWithChatBackedChatAdapter';\nimport { CallAdapter } from '../CallComposite';\nimport { ChatComposite, ChatAdapter } from '../ChatComposite';\nimport { BaseProvider, BaseCompositeProps } from '../common/BaseComposite';\nimport { CallWithChatCompositeIcons } from '../common/icons';\nimport { AvatarPersonaDataCallback } from '../common/AvatarPersona';\nimport { CallWithChatAdapterState } from './state/CallWithChatAdapterState';\n/* @conditional-compile-remove(end-of-call-survey) */\nimport { CallSurveyImprovementSuggestions } from '@internal/react-components';\nimport {\n ParticipantMenuItemsCallback,\n _useContainerHeight,\n _useContainerWidth,\n useTheme\n} from '@internal/react-components';\nimport { useId } from '@fluentui/react-hooks';\nimport { containerDivStyles } from '../common/ContainerRectProps';\nimport { useCallWithChatCompositeStrings } from './hooks/useCallWithChatCompositeStrings';\nimport { CallCompositeInner, CallCompositeOptions } from '../CallComposite/CallComposite';\nimport { RemoteVideoTileMenuOptions } from '../CallComposite/CallComposite';\nimport { LocalVideoTileOptions } from '../CallComposite/CallComposite';\n/* @conditional-compile-remove(call-readiness) */\nimport { DeviceCheckOptions } from '../CallComposite/CallComposite';\nimport { CommonCallControlOptions } from '../common/types/CommonCallControlOptions';\nimport { ChatButtonWithUnreadMessagesBadge } from './ChatButton/ChatButtonWithUnreadMessagesBadge';\nimport { getDesktopCommonButtonStyles } from '../common/ControlBar/CommonCallControlBar';\nimport { InjectedSidePaneProps } from '../CallComposite/components/SidePane/SidePaneProvider';\nimport { isDisabled } from '../CallComposite/utils';\nimport {\n CustomCallControlButtonCallback,\n CustomCallControlButtonCallbackArgs\n} from '../common/ControlBar/CustomButton';\nimport { SidePaneHeader } from '../common/SidePaneHeader';\nimport { CallControlOptions } from '../CallComposite/types/CallControlOptions';\nimport { useUnreadMessagesTracker } from './ChatButton/useUnreadMessagesTracker';\nimport { VideoGalleryLayout } from '@internal/react-components';\n/* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */\nimport { AttachmentOptions } from '@internal/react-components';\n\n/**\n * Props required for the {@link CallWithChatComposite}\n *\n * @public\n */\nexport interface CallWithChatCompositeProps extends BaseCompositeProps<CallWithChatCompositeIcons> {\n adapter: CallWithChatAdapter;\n /**\n * Fluent theme for the composite.\n *\n * Defaults to a light theme if undefined.\n */\n fluentTheme?: PartialTheme | Theme;\n /**\n * Optimizes the composite form factor for either desktop or mobile.\n * @remarks `mobile` is currently only optimized for Portrait mode on mobile devices and does not support landscape.\n * @defaultValue 'desktop'\n */\n formFactor?: 'desktop' | 'mobile';\n /**\n * URL that can be used to copy a call-with-chat invite to the Users clipboard.\n */\n joinInvitationURL?: string;\n /**\n * Flags to enable/disable or customize UI elements of the {@link CallWithChatComposite}\n */\n options?: CallWithChatCompositeOptions;\n}\n\n/**\n * Customization options for the control bar in calling with chat experience.\n *\n * @public\n */\nexport interface CallWithChatControlOptions extends CommonCallControlOptions {\n /**\n * Show or hide the chat button in the call-with-chat composite control bar.\n * @defaultValue true\n */\n chatButton?: boolean | /* @conditional-compile-remove(PSTN-calls) */ { disabled: boolean };\n}\n\n/**\n * Optional features of the {@link CallWithChatComposite}.\n *\n * @public\n */\nexport type CallWithChatCompositeOptions = {\n /**\n * Call control options to change what buttons show on the call-with-chat composite control bar.\n * If using the boolean values, true will cause default behavior across the whole control bar. False hides the whole control bar.\n */\n callControls?: boolean | CallWithChatControlOptions;\n /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */\n /**\n * Properties for configuring the File Sharing feature.\n * If undefined, file sharing feature will be disabled.\n * @beta\n */\n attachmentOptions?: AttachmentOptions;\n /* @conditional-compile-remove(call-readiness) */\n /**\n * Device permissions check options for your call.\n * Here you can choose what device permissions you prompt the user for,\n * as well as what device permissions must be accepted before starting a call.\n */\n deviceChecks?: DeviceCheckOptions;\n /* @conditional-compile-remove(call-readiness) */\n /**\n * Callback you may provide to supply users with further steps to troubleshoot why they have been\n * unable to grant your site the required permissions for the call.\n *\n * @example\n * ```ts\n * onPermissionsTroubleshootingClick: () =>\n * window.open('https://contoso.com/permissions-troubleshooting', '_blank');\n * ```\n *\n * @remarks\n * if this is not supplied, the composite will not show a 'further troubleshooting' link.\n */\n onPermissionsTroubleshootingClick?: (permissionsState: {\n camera: PermissionState;\n microphone: PermissionState;\n }) => void;\n /* @conditional-compile-remove(call-readiness) */\n /**\n * Optional callback to supply users with further troubleshooting steps for network issues\n * experienced when connecting to a call.\n *\n * @example\n * ```ts\n * onNetworkingTroubleShootingClick?: () =>\n * window.open('https://contoso.com/network-troubleshooting', '_blank');\n * ```\n *\n * @remarks\n * if this is not supplied, the composite will not show a 'network troubleshooting' link.\n */\n onNetworkingTroubleShootingClick?: () => void;\n /* @conditional-compile-remove(unsupported-browser) */\n /**\n * Callback you may provide to supply users with a provided page to showcase supported browsers by ACS.\n *\n * @example\n * ```ts\n * onBrowserTroubleShootingClick?: () =>\n * window.open('https://contoso.com/browser-troubleshooting', '_blank');\n * ```\n *\n * @remarks\n * if this is not supplied, the composite will not show a unsupported browser page.\n */\n onEnvironmentInfoTroubleshootingClick?: () => void;\n /**\n * Remote participant video tile menu options\n */\n remoteVideoTileMenuOptions?: RemoteVideoTileMenuOptions;\n /**\n * Options for controlling the local video tile.\n *\n * @remarks if 'false' the local video tile will not be rendered.\n */\n localVideoTile?: boolean | LocalVideoTileOptions;\n /**\n * Options for controlling the starting layout of the composite's video gallery\n */\n galleryOptions?: {\n /**\n * Layout for the gallery when the call starts\n */\n layout?: VideoGalleryLayout;\n };\n /* @conditional-compile-remove(end-of-call-survey) */\n /**\n * Options for end of call survey\n */\n surveyOptions?: {\n /**\n * Disable call survey at the end of a call.\n * @defaultValue false\n */\n disableSurvey?: boolean;\n /**\n * Optional callback to redirect users to custom screens when survey is done, note that default end call screen will be shown if this callback is not provided\n * This callback can be used to redirect users to different screens depending on survey state, whether it is submitted, skipped or has a problem when submitting the survey\n */\n onSurveyClosed?: (surveyState: 'sent' | 'skipped' | 'error', surveyError?: string) => void;\n /**\n * Optional callback to handle survey data including free form text response\n * Note that free form text response survey option is only going to be enabled when this callback is provided\n * User will need to handle all free form text response on their own\n */\n onSurveySubmitted?: (\n callId: string,\n surveyId: string,\n /**\n * This is the survey results containing star survey data and API tag survey data.\n * This part of the result will always be sent to the calling sdk\n * This callback provides user with the ability to gain access to survey data\n */\n submittedSurvey: CallSurvey,\n /**\n * This is the survey results containing free form text\n * This part of the result will not be handled by composites\n * User will need to collect and handle this information 100% on their own\n * Free form text survey is not going to show in the UI if onSurveySubmitted is not populated\n */\n improvementSuggestions: CallSurveyImprovementSuggestions\n ) => Promise<void>;\n };\n /**\n * Options for setting additional customizations related to personalized branding.\n */\n branding?: {\n /**\n * Logo displayed on the configuration page.\n */\n logo?: {\n /**\n * URL for the logo image.\n *\n * @remarks\n * Recommended size is 80x80 pixels.\n */\n url: string;\n /**\n * Alt text for the logo image.\n */\n alt?: string;\n /**\n * The logo can be displayed as a circle.\n *\n * @defaultValue 'unset'\n */\n shape?: 'unset' | 'circle';\n };\n /**\n * Background image displayed on the configuration page.\n */\n backgroundImage?: {\n /**\n * URL for the background image.\n *\n * @remarks\n * Background image should be larger than 576x567 pixels and smaller than 2048x2048 pixels pixels.\n */\n url: string;\n };\n };\n /* @conditional-compile-remove(spotlight) */\n /**\n * Options for settings related to spotlight.\n */\n spotlight?: {\n /**\n * Flag to hide the menu buttons to start and stop spotlight for remote participants and the local participant.\n * @defaultValue false\n */\n hideSpotlightButtons?: boolean;\n };\n};\n\ntype CallWithChatScreenProps = {\n callWithChatAdapter: CallWithChatAdapter;\n fluentTheme?: PartialTheme | Theme;\n formFactor?: 'desktop' | 'mobile';\n joinInvitationURL?: string;\n callControls?: boolean | CallWithChatControlOptions;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */\n attachmentOptions?: AttachmentOptions;\n rtl?: boolean;\n /* @conditional-compile-remove(call-readiness) */\n deviceChecks?: DeviceCheckOptions;\n /* @conditional-compile-remove(call-readiness) */\n onPermissionsTroubleshootingClick?: (permissionsState: {\n camera: PermissionState;\n microphone: PermissionState;\n }) => void;\n /* @conditional-compile-remove(call-readiness) */\n onNetworkingTroubleShootingClick?: () => void;\n /* @conditional-compile-remove(unsupported-browser) */\n onEnvironmentInfoTroubleshootingClick?: () => void;\n remoteVideoTileMenuOptions?: RemoteVideoTileMenuOptions;\n localVideoTile?: boolean | LocalVideoTileOptions;\n galleryOptions?: {\n layout?: VideoGalleryLayout;\n };\n /* @conditional-compile-remove(end-of-call-survey) */\n /**\n * Options for end of call survey\n */\n surveyOptions?: {\n /**\n * Disable call survey at the end of a call.\n * @defaultValue false\n */\n disableSurvey?: boolean;\n /**\n * Optional callback to redirect users to custom screens when survey is done, note that default end call screen will be shown if this callback is not provided\n * This callback can be used to redirect users to different screens depending on survey state, whether it is submitted, skipped or has a problem when submitting the survey\n */\n onSurveyClosed?: (surveyState: 'sent' | 'skipped' | 'error', surveyError?: string) => void;\n /**\n * Optional callback to handle survey data including free form text response\n * Note that free form text response survey option is only going to be enabled when this callback is provided\n * User will need to handle all free form text response on their own\n */\n onSurveySubmitted?: (\n callId: string,\n surveyId: string,\n /**\n * This is the survey results containing star survey data and API tag survey data.\n * This part of the result will always be sent to the calling sdk\n * This callback provides user with the ability to gain access to survey data\n */\n submittedSurvey: CallSurvey,\n /**\n * This is the survey results containing free form text\n * This part of the result will not be handled by composites\n * User will need to collect and handle this information 100% on their own\n * Free form text survey is not going to show in the UI if onSurveySubmitted is not populated\n */\n improvementSuggestions: CallSurveyImprovementSuggestions\n ) => Promise<void>;\n };\n logo?: {\n url: string;\n alt?: string;\n shape?: 'unset' | 'circle';\n };\n backgroundImage?: {\n url: string;\n };\n /* @conditional-compile-remove(spotlight) */\n spotlight?: {\n hideSpotlightButtons?: boolean;\n };\n};\n\nconst CallWithChatScreen = (props: CallWithChatScreenProps): JSX.Element => {\n const { callWithChatAdapter, fluentTheme, formFactor = 'desktop' } = props;\n /* @conditional-compile-remove(end-of-call-survey) */\n const { surveyOptions } = props;\n const mobileView = formFactor === 'mobile';\n\n if (!callWithChatAdapter) {\n throw new Error('CallWithChatAdapter is undefined');\n }\n\n const callAdapter: CallAdapter = useMemo(\n () => new CallWithChatBackedCallAdapter(callWithChatAdapter),\n [callWithChatAdapter]\n );\n\n const [currentCallState, setCurrentCallState] = useState<CallState>();\n const [isChatInitialized, setIsChatInitialized] = useState(false);\n const [currentPage, setCurrentPage] = useState<CallCompositePage>();\n const [isChatOpen, setIsChatOpen] = useState(false);\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const updateCallWithChatPage = (newState: CallWithChatAdapterState): void => {\n setCurrentPage(newState.page);\n setCurrentCallState(newState.call?.state);\n setIsChatInitialized(newState.chat ? true : false);\n };\n updateCallWithChatPage(callWithChatAdapter.getState());\n callWithChatAdapter.onStateChange(updateCallWithChatPage);\n return () => {\n callWithChatAdapter.offStateChange(updateCallWithChatPage);\n };\n }, [callWithChatAdapter]);\n\n const chatAdapter: ChatAdapter = useMemo(() => {\n return new CallWithChatBackedChatAdapter(callWithChatAdapter);\n }, [callWithChatAdapter]);\n\n /** Constant setting of id for the parent stack of the composite */\n const compositeParentDivId = useId('callWithChatCompositeParentDiv-internal');\n\n const closeChat = useCallback(() => {\n setIsChatOpen(false);\n }, []);\n const openChat = useCallback(() => {\n setIsChatOpen(true);\n // timeout is required to give the window time to render the sendbox so we have something to send focus to.\n // TODO: Selecting elements in the DOM via attributes is not stable. We should expose an API from ChatComposite to be able to focus on the sendbox.\n const chatFocusTimeout = setInterval(() => {\n const callWithChatCompositeRootDiv = document.querySelector(`[id=\"${compositeParentDivId}\"]`);\n const sendbox = callWithChatCompositeRootDiv?.querySelector(`[id=\"sendbox\"]`) as HTMLTextAreaElement;\n if (sendbox !== null) {\n sendbox.focus();\n clearInterval(chatFocusTimeout);\n }\n }, 3);\n setTimeout(() => {\n clearInterval(chatFocusTimeout);\n }, 300);\n }, [compositeParentDivId]);\n\n const isOnHold = isOnHoldTrampoline(currentPage);\n useEffect(() => {\n if (isOnHold) {\n closeChat();\n }\n }, [closeChat, isOnHold]);\n\n const hasJoinedCall = !!(currentPage && hasJoinedCallFn(currentPage, currentCallState ?? 'None'));\n const toggleChat = useCallback(() => {\n isChatOpen || !hasJoinedCall ? closeChat() : openChat();\n }, [closeChat, hasJoinedCall, isChatOpen, openChat]);\n\n const callWithChatStrings = useCallWithChatCompositeStrings();\n const chatButtonStrings = useMemo(\n () => ({\n label: callWithChatStrings.chatButtonLabel,\n tooltipOffContent: callWithChatStrings.chatButtonTooltipOpen,\n tooltipOnContent: callWithChatStrings.chatButtonTooltipClose\n }),\n [callWithChatStrings]\n );\n const theme = useTheme();\n const commonButtonStyles = useMemo(\n () => (!mobileView ? getDesktopCommonButtonStyles(theme) : undefined),\n [mobileView, theme]\n );\n\n const showChatButton = checkShowChatButton(props.callControls);\n const chatButtonDisabled =\n showChatButton && (checkChatButtonIsDisabled(props.callControls) || !hasJoinedCall || isOnHold);\n const chatTabHeaderProps = useMemo(\n () =>\n mobileView && showChatButton\n ? {\n onClick: toggleChat,\n disabled: chatButtonDisabled\n }\n : undefined,\n [chatButtonDisabled, mobileView, toggleChat, showChatButton]\n );\n\n const unreadChatMessagesCount = useUnreadMessagesTracker(chatAdapter, isChatOpen, isChatInitialized);\n\n const customChatButton: CustomCallControlButtonCallback = useCallback(\n (args: CustomCallControlButtonCallbackArgs) => ({\n placement: mobileView ? 'primary' : 'secondary',\n onRenderButton: () => (\n <ChatButtonWithUnreadMessagesBadge\n checked={isChatOpen}\n showLabel={args.displayType !== 'compact'}\n onClick={toggleChat}\n disabled={chatButtonDisabled}\n strings={chatButtonStrings}\n styles={commonButtonStyles}\n newMessageLabel={callWithChatStrings.chatButtonNewMessageNotificationLabel}\n unreadChatMessagesCount={unreadChatMessagesCount}\n // As chat is disabled when on hold, we don't want to show the unread badge when on hold\n hideUnreadChatMessagesBadge={isOnHold}\n disableTooltip={mobileView}\n />\n )\n }),\n [\n callWithChatStrings.chatButtonNewMessageNotificationLabel,\n chatButtonStrings,\n commonButtonStyles,\n isChatOpen,\n chatButtonDisabled,\n mobileView,\n toggleChat,\n unreadChatMessagesCount,\n isOnHold\n ]\n );\n\n const callControlOptionsFromProps = useMemo(\n () => ({\n ...(typeof props.callControls === 'object' ? props.callControls : {})\n }),\n [props.callControls]\n );\n\n const injectedCustomButtonsFromProps = useMemo(() => {\n return [...(callControlOptionsFromProps.onFetchCustomButtonProps ?? [])];\n }, [callControlOptionsFromProps]);\n\n const callCompositeOptions: CallCompositeOptions = useMemo(\n () => ({\n callControls:\n props.callControls === false\n ? false\n : ({\n ...callControlOptionsFromProps,\n onFetchCustomButtonProps: [\n ...(showChatButton ? [customChatButton] : []),\n ...injectedCustomButtonsFromProps\n ],\n legacyControlBarExperience: false\n } as CallControlOptions),\n /* @conditional-compile-remove(call-readiness) */\n deviceChecks: props.deviceChecks,\n /* @conditional-compile-remove(call-readiness) */\n onNetworkingTroubleShootingClick: props.onNetworkingTroubleShootingClick,\n /* @conditional-compile-remove(call-readiness) */\n onPermissionsTroubleshootingClick: props.onPermissionsTroubleshootingClick,\n /* @conditional-compile-remove(unsupported-browser) */\n onEnvironmentInfoTroubleshootingClick: props.onEnvironmentInfoTroubleshootingClick,\n remoteVideoTileMenuOptions: props.remoteVideoTileMenuOptions,\n\n galleryOptions: props.galleryOptions,\n localVideoTile: props.localVideoTile,\n /* @conditional-compile-remove(end-of-call-survey) */\n surveyOptions: surveyOptions,\n branding: {\n logo: props.logo,\n backgroundImage: props.backgroundImage\n },\n /* @conditional-compile-remove(spotlight) */\n spotlight: props.spotlight\n }),\n [\n props.callControls,\n callControlOptionsFromProps,\n showChatButton,\n customChatButton,\n injectedCustomButtonsFromProps,\n /* @conditional-compile-remove(call-readiness) */\n props.deviceChecks,\n /* @conditional-compile-remove(unsupported-browser) */\n props.onEnvironmentInfoTroubleshootingClick,\n /* @conditional-compile-remove(call-readiness) */\n props.onNetworkingTroubleShootingClick,\n /* @conditional-compile-remove(call-readiness) */\n props.onPermissionsTroubleshootingClick,\n\n props.galleryOptions,\n props.localVideoTile,\n props.remoteVideoTileMenuOptions,\n /* @conditional-compile-remove(end-of-call-survey) */\n surveyOptions,\n props.logo,\n props.backgroundImage,\n /* @conditional-compile-remove(spotlight) */\n props.spotlight\n ]\n );\n\n const onRenderChatContent = useCallback(\n (): JSX.Element => (\n <ChatComposite\n adapter={chatAdapter}\n fluentTheme={theme}\n options={{\n topic: false,\n /* @conditional-compile-remove(chat-composite-participant-pane) */\n participantPane: false,\n /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */\n attachmentOptions: props.attachmentOptions\n }}\n onFetchAvatarPersonaData={props.onFetchAvatarPersonaData}\n />\n ),\n [\n chatAdapter,\n /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ props.attachmentOptions,\n props.onFetchAvatarPersonaData,\n theme\n ]\n );\n\n const sidePaneHeaderRenderer = useCallback(\n () => (\n <SidePaneHeader\n headingText={callWithChatStrings.chatPaneTitle}\n onClose={closeChat}\n dismissSidePaneButtonAriaLabel={callWithChatStrings.dismissSidePaneButtonLabel ?? ''}\n mobileView={mobileView}\n />\n ),\n [callWithChatStrings.chatPaneTitle, callWithChatStrings.dismissSidePaneButtonLabel, closeChat, mobileView]\n );\n\n const sidePaneContentRenderer = useMemo(\n () => (hasJoinedCall ? onRenderChatContent : undefined),\n [hasJoinedCall, onRenderChatContent]\n );\n\n const sidePaneRenderer = useMemo(\n () => ({\n contentRenderer: sidePaneContentRenderer,\n headerRenderer: sidePaneHeaderRenderer,\n id: 'chat'\n }),\n [sidePaneContentRenderer, sidePaneHeaderRenderer]\n );\n\n const overrideSidePaneProps: InjectedSidePaneProps = useMemo(\n () => ({\n renderer: sidePaneRenderer,\n isActive: isChatOpen,\n persistRenderingWhenClosed: true\n }),\n [isChatOpen, sidePaneRenderer]\n );\n\n const onSidePaneIdChange = useCallback(\n (sidePaneId: string | undefined) => {\n // If the pane is switched to something other than chat, removing rendering chat.\n if (sidePaneId && sidePaneId !== 'chat') {\n closeChat();\n }\n },\n [closeChat]\n );\n\n // When the call ends ensure the side pane is set to closed to prevent the side pane being open if the call is re-joined.\n useEffect(() => {\n callAdapter.on('callEnded', closeChat);\n return () => {\n callAdapter.off('callEnded', closeChat);\n };\n }, [callAdapter, closeChat]);\n\n return (\n <div ref={containerRef} className={mergeStyles(containerDivStyles)}>\n <Stack verticalFill grow styles={compositeOuterContainerStyles} id={compositeParentDivId}>\n <Stack horizontal grow>\n <Stack.Item grow styles={callCompositeContainerStyles(mobileView)}>\n <CallCompositeInner\n {...props}\n formFactor={formFactor}\n options={callCompositeOptions}\n adapter={callAdapter}\n fluentTheme={fluentTheme}\n callInvitationUrl={props.joinInvitationURL}\n overrideSidePane={overrideSidePaneProps}\n onSidePaneIdChange={onSidePaneIdChange}\n mobileChatTabHeader={chatTabHeaderProps}\n onCloseChatPane={closeChat}\n />\n </Stack.Item>\n </Stack>\n </Stack>\n </div>\n );\n};\n\n/**\n * CallWithChatComposite brings together key components to provide a full call with chat experience out of the box.\n *\n * @public\n */\nexport const CallWithChatComposite = (props: CallWithChatCompositeProps): JSX.Element => {\n const { adapter, fluentTheme, rtl, formFactor, joinInvitationURL, options } = props;\n return (\n <BaseProvider fluentTheme={fluentTheme} rtl={rtl} locale={props.locale} icons={props.icons}>\n <CallWithChatScreen\n {...props}\n /* @conditional-compile-remove(call-readiness) */\n deviceChecks={options?.deviceChecks}\n callWithChatAdapter={adapter}\n formFactor={formFactor}\n callControls={options?.callControls}\n joinInvitationURL={joinInvitationURL}\n fluentTheme={fluentTheme}\n remoteVideoTileMenuOptions={options?.remoteVideoTileMenuOptions}\n /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */\n attachmentOptions={options?.attachmentOptions}\n localVideoTile={options?.localVideoTile}\n galleryOptions={options?.galleryOptions}\n logo={options?.branding?.logo}\n backgroundImage={options?.branding?.backgroundImage}\n /* @conditional-compile-remove(end-of-call-survey) */\n surveyOptions={options?.surveyOptions}\n /* @conditional-compile-remove(spotlight) */\n spotlight={options?.spotlight}\n />\n </BaseProvider>\n );\n};\n\nconst hasJoinedCallFn = (page: CallCompositePage, callStatus: CallState): boolean => {\n /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(one-to-n-calling) */\n return (\n (page === 'call' &&\n (callStatus === 'Connected' || callStatus === 'RemoteHold' || callStatus === 'Disconnecting')) ||\n (page === 'hold' && (callStatus === 'LocalHold' || callStatus === 'Disconnecting'))\n );\n return page === 'call' && (callStatus === 'Connected' || callStatus === 'Disconnecting');\n};\n\nconst checkShowChatButton = (callControls?: boolean | CallWithChatControlOptions): boolean => {\n if (callControls === undefined || callControls === true) {\n return true;\n }\n if (callControls === false) {\n return false;\n }\n return callControls.chatButton !== false;\n};\n\nconst checkChatButtonIsDisabled = (callControls?: boolean | CallWithChatControlOptions): boolean => {\n return typeof callControls === 'object' && isDisabled(callControls?.chatButton);\n};\n\nconst isOnHoldTrampoline = (page: CallCompositePage | undefined): boolean => {\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n return page === 'hold';\n return false;\n};\n"]}
1
+ {"version":3,"file":"CallWithChatComposite.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACjF,OAAO,EAAE,WAAW,EAAgB,KAAK,EAAS,MAAM,iBAAiB,CAAC;AAK1E,OAAO,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAC;AAEnH,OAAO,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAC;AACxF,OAAO,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAC;AAExF,OAAO,EAAE,aAAa,EAAe,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAsB,MAAM,yBAAyB,CAAC;AAM3E,OAAO,EAIL,QAAQ,EACT,yCAAmC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,+BAA+B,EAAE,MAAM,yCAAyC,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAwB,MAAM,gCAAgC,CAAC;AAM1F,OAAO,EAAE,iCAAiC,EAAE,MAAM,gDAAgD,CAAC;AACnG,OAAO,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AAEzF,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAKpD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AA8TjF,MAAM,kBAAkB,GAAG,CAAC,KAA8B,EAAe,EAAE;IACzE,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,UAAU,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC;IAC3E,qDAAqD;IACrD,MAAM,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IAChC,MAAM,UAAU,GAAG,UAAU,KAAK,QAAQ,CAAC;IAE3C,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,WAAW,GAAgB,OAAO,CACtC,GAAG,EAAE,CAAC,IAAI,6BAA6B,CAAC,mBAAmB,CAAC,EAC5D,CAAC,mBAAmB,CAAC,CACtB,CAAC;IAEF,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,EAAa,CAAC;IACtE,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,EAAqB,CAAC;IACpE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAElD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,sBAAsB,GAAG,CAAC,QAAkC,EAAQ,EAAE;;YAC1E,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC9B,mBAAmB,CAAC,MAAA,QAAQ,CAAC,IAAI,0CAAE,KAAK,CAAC,CAAC;YAC1C,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC,CAAC;QACF,sBAAsB,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvD,mBAAmB,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;QAC1D,OAAO,GAAG,EAAE;YACV,mBAAmB,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC;QAC7D,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE1B,MAAM,WAAW,GAAgB,OAAO,CAAC,GAAG,EAAE;QAC5C,OAAO,IAAI,6BAA6B,CAAC,mBAAmB,CAAC,CAAC;IAChE,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE1B,mEAAmE;IACnE,MAAM,oBAAoB,GAAG,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAE9E,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;QACjC,aAAa,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,2GAA2G;QAC3G,mJAAmJ;QACnJ,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;YACxC,MAAM,4BAA4B,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,oBAAoB,IAAI,CAAC,CAAC;YAC9F,MAAM,OAAO,GAAG,4BAA4B,aAA5B,4BAA4B,uBAA5B,4BAA4B,CAAE,aAAa,CAAC,gBAAgB,CAAwB,CAAC;YACrG,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,aAAa,CAAC,gBAAgB,CAAC,CAAC;YAClC,CAAC;QACH,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,UAAU,CAAC,GAAG,EAAE;YACd,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAClC,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAE3B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACjD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,QAAQ,EAAE,CAAC;YACb,SAAS,EAAE,CAAC;QACd,CAAC;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE1B,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,eAAe,CAAC,WAAW,EAAE,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,MAAM,CAAC,CAAC,CAAC;IAClG,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,UAAU,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC1D,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IAErD,MAAM,mBAAmB,GAAG,+BAA+B,EAAE,CAAC;IAC9D,MAAM,iBAAiB,GAAG,OAAO,CAC/B,GAAG,EAAE,CAAC,CAAC;QACL,KAAK,EAAE,mBAAmB,CAAC,eAAe;QAC1C,iBAAiB,EAAE,mBAAmB,CAAC,qBAAqB;QAC5D,gBAAgB,EAAE,mBAAmB,CAAC,sBAAsB;KAC7D,CAAC,EACF,CAAC,mBAAmB,CAAC,CACtB,CAAC;IACF,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,kBAAkB,GAAG,OAAO,CAChC,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EACrE,CAAC,UAAU,EAAE,KAAK,CAAC,CACpB,CAAC;IAEF,MAAM,cAAc,GAAG,mBAAmB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC/D,MAAM,kBAAkB,GACtB,cAAc,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,IAAI,QAAQ,CAAC,CAAC;IAClG,MAAM,kBAAkB,GAAG,OAAO,CAChC,GAAG,EAAE,CACH,UAAU,IAAI,cAAc;QAC1B,CAAC,CAAC;YACE,OAAO,EAAE,UAAU;YACnB,QAAQ,EAAE,kBAAkB;SAC7B;QACH,CAAC,CAAC,SAAS,EACf,CAAC,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC,CAC7D,CAAC;IAEF,MAAM,uBAAuB,GAAG,wBAAwB,CAAC,WAAW,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAErG,MAAM,gBAAgB,GAAoC,WAAW,CACnE,CAAC,IAAyC,EAAE,EAAE,CAAC,CAAC;QAC9C,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;QAC/C,cAAc,EAAE,GAAG,EAAE,CAAC,CACpB,oBAAC,iCAAiC,IAChC,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,IAAI,CAAC,WAAW,KAAK,SAAS,EACzC,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,kBAAkB,EAC1B,eAAe,EAAE,mBAAmB,CAAC,qCAAqC,EAC1E,uBAAuB,EAAE,uBAAuB;YAChD,wFAAwF;YACxF,2BAA2B,EAAE,QAAQ,EACrC,cAAc,EAAE,UAAU,GAC1B,CACH;KACF,CAAC,EACF;QACE,mBAAmB,CAAC,qCAAqC;QACzD,iBAAiB;QACjB,kBAAkB;QAClB,UAAU;QACV,kBAAkB;QAClB,UAAU;QACV,UAAU;QACV,uBAAuB;QACvB,QAAQ;KACT,CACF,CAAC;IAEF,MAAM,2BAA2B,GAAG,OAAO,CACzC,GAAG,EAAE,CAAC,mBACD,CAAC,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EACrE,EACF,CAAC,KAAK,CAAC,YAAY,CAAC,CACrB,CAAC;IAEF,MAAM,8BAA8B,GAAG,OAAO,CAAC,GAAG,EAAE;;QAClD,OAAO,CAAC,GAAG,CAAC,MAAA,2BAA2B,CAAC,wBAAwB,mCAAI,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAElC,MAAM,oBAAoB,GAAyB,OAAO,CACxD,GAAG,EAAE,CAAC,CAAC;QACL,YAAY,EACV,KAAK,CAAC,YAAY,KAAK,KAAK;YAC1B,CAAC,CAAC,KAAK;YACP,CAAC,CAAE,gCACI,2BAA2B,KAC9B,wBAAwB,EAAE;oBACxB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7C,GAAG,8BAA8B;iBAClC,EACD,0BAA0B,EAAE,KAAK,GACX;QAC9B,iDAAiD;QACjD,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,iDAAiD;QACjD,gCAAgC,EAAE,KAAK,CAAC,gCAAgC;QACxE,iDAAiD;QACjD,iCAAiC,EAAE,KAAK,CAAC,iCAAiC;QAC1E,sDAAsD;QACtD,qCAAqC,EAAE,KAAK,CAAC,qCAAqC;QAClF,0BAA0B,EAAE,KAAK,CAAC,0BAA0B;QAE5D,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,qDAAqD;QACrD,aAAa,EAAE,aAAa;QAC5B,QAAQ,EAAE;YACR,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,eAAe,EAAE,KAAK,CAAC,eAAe;SACvC;QACD,4CAA4C;QAC5C,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC,EACF;QACE,KAAK,CAAC,YAAY;QAClB,2BAA2B;QAC3B,cAAc;QACd,gBAAgB;QAChB,8BAA8B;QAC9B,iDAAiD;QACjD,KAAK,CAAC,YAAY;QAClB,sDAAsD;QACtD,KAAK,CAAC,qCAAqC;QAC3C,iDAAiD;QACjD,KAAK,CAAC,gCAAgC;QACtC,iDAAiD;QACjD,KAAK,CAAC,iCAAiC;QAEvC,KAAK,CAAC,cAAc;QACpB,KAAK,CAAC,cAAc;QACpB,KAAK,CAAC,0BAA0B;QAChC,qDAAqD;QACrD,aAAa;QACb,KAAK,CAAC,IAAI;QACV,KAAK,CAAC,eAAe;QACrB,4CAA4C;QAC5C,KAAK,CAAC,SAAS;KAChB,CACF,CAAC;IAEF,MAAM,mBAAmB,GAAG,WAAW,CACrC,GAAgB,EAAE,CAAC,CACjB,oBAAC,aAAa,IACZ,OAAO,EAAE,WAAW,EACpB,WAAW,EAAE,KAAK,EAClB,OAAO,EAAE;YACP,KAAK,EAAE,KAAK;YACZ,kEAAkE;YAClE,eAAe,EAAE,KAAK;YACtB,qGAAqG;YACrG,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;YAC1C,qEAAqE;YACrE,cAAc,EAAE,KAAK,CAAC,cAAc;SACrC,EACD,wBAAwB,EAAE,KAAK,CAAC,wBAAwB,GACxD,CACH,EACD;QACE,WAAW;QACX,qGAAqG;QACrG,KAAK,CAAC,iBAAiB;QACvB,KAAK,CAAC,wBAAwB;QAC9B,qEAAqE,CAAC,KAAK,CAAC,cAAc;QAC1F,KAAK;KACN,CACF,CAAC;IAEF,MAAM,sBAAsB,GAAG,WAAW,CACxC,GAAG,EAAE;;QAAC,OAAA,CACJ,oBAAC,cAAc,IACb,WAAW,EAAE,mBAAmB,CAAC,aAAa,EAC9C,OAAO,EAAE,SAAS,EAClB,8BAA8B,EAAE,MAAA,mBAAmB,CAAC,0BAA0B,mCAAI,EAAE,EACpF,UAAU,EAAE,UAAU,GACtB,CACH,CAAA;KAAA,EACD,CAAC,mBAAmB,CAAC,aAAa,EAAE,mBAAmB,CAAC,0BAA0B,EAAE,SAAS,EAAE,UAAU,CAAC,CAC3G,CAAC;IAEF,MAAM,uBAAuB,GAAG,OAAO,CACrC,GAAG,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,EACvD,CAAC,aAAa,EAAE,mBAAmB,CAAC,CACrC,CAAC;IAEF,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CAAC,CAAC;QACL,eAAe,EAAE,uBAAuB;QACxC,cAAc,EAAE,sBAAsB;QACtC,EAAE,EAAE,MAAM;KACX,CAAC,EACF,CAAC,uBAAuB,EAAE,sBAAsB,CAAC,CAClD,CAAC;IAEF,MAAM,qBAAqB,GAA0B,OAAO,CAC1D,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ,EAAE,gBAAgB;QAC1B,QAAQ,EAAE,UAAU;QACpB,0BAA0B,EAAE,IAAI;KACjC,CAAC,EACF,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAC/B,CAAC;IAEF,MAAM,kBAAkB,GAAG,WAAW,CACpC,CAAC,UAA8B,EAAE,EAAE;QACjC,iFAAiF;QACjF,IAAI,UAAU,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YACxC,SAAS,EAAE,CAAC;QACd,CAAC;IACH,CAAC,EACD,CAAC,SAAS,CAAC,CACZ,CAAC;IAEF,yHAAyH;IACzH,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACvC,OAAO,GAAG,EAAE;YACV,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAC1C,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAE7B,OAAO,CACL,6BAAK,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,CAAC,kBAAkB,CAAC;QAChE,oBAAC,KAAK,IAAC,YAAY,QAAC,IAAI,QAAC,MAAM,EAAE,6BAA6B,EAAE,EAAE,EAAE,oBAAoB;YACtF,oBAAC,KAAK,IAAC,UAAU,QAAC,IAAI;gBACpB,oBAAC,KAAK,CAAC,IAAI,IAAC,IAAI,QAAC,MAAM,EAAE,4BAA4B,CAAC,UAAU,CAAC;oBAC/D,oBAAC,kBAAkB,oBACb,KAAK,IACT,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,WAAW,EACpB,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAC1C,gBAAgB,EAAE,qBAAqB,EACvC,kBAAkB,EAAE,kBAAkB,EACtC,mBAAmB,EAAE,kBAAkB,EACvC,eAAe,EAAE,SAAS,IAC1B,CACS,CACP,CACF,CACJ,CACP,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAiC,EAAe,EAAE;;IACtF,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,iBAAiB,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACpF,OAAO,CACL,oBAAC,YAAY,IAAC,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK;QACxF,oBAAC,kBAAkB,oBACb,KAAK;YACT,iDAAiD;YACjD,YAAY,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,EACnC,mBAAmB,EAAE,OAAO,EAC5B,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,EACnC,iBAAiB,EAAE,iBAAiB,EACpC,WAAW,EAAE,WAAW,EACxB,0BAA0B,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,0BAA0B;YAC/D,qGAAqG;YACrG,iBAAiB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,iBAAiB,EAC7C,cAAc,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,EACvC,cAAc,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,EACvC,IAAI,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,0CAAE,IAAI,EAC7B,eAAe,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,0CAAE,eAAe;YACnD,qDAAqD;YACrD,aAAa,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa;YACrC,4CAA4C;YAC5C,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,IAC7B,CACW,CAChB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,IAAuB,EAAE,UAAqB,EAAW,EAAE;IAClF,mDAAmD,CAAC,mDAAmD;IACvG,OAAO,CACL,CAAC,IAAI,KAAK,MAAM;QACd,CAAC,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,YAAY,IAAI,UAAU,KAAK,eAAe,CAAC,CAAC;QAChG,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,eAAe,CAAC,CAAC,CACpF,CAAC;IACF,OAAO,IAAI,KAAK,MAAM,IAAI,CAAC,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,eAAe,CAAC,CAAC;AAC3F,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,YAAmD,EAAW,EAAE;IAC3F,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,YAAY,CAAC,UAAU,KAAK,KAAK,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAAC,YAAmD,EAAW,EAAE;IACjG,OAAO,OAAO,YAAY,KAAK,QAAQ,IAAI,UAAU,CAAC,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,UAAU,CAAC,CAAC;AAClF,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,IAAmC,EAAW,EAAE;IAC1E,6CAA6C,CAAC,mDAAmD;IACjG,OAAO,IAAI,KAAK,MAAM,CAAC;IACvB,OAAO,KAAK,CAAC;AACf,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { useCallback, useState, useMemo, useEffect, useRef } from 'react';\nimport { mergeStyles, PartialTheme, Stack, Theme } from '@fluentui/react';\nimport { CallCompositePage } from '../CallComposite';\n/* @conditional-compile-remove(end-of-call-survey) */\nimport { CallSurvey } from '@azure/communication-calling';\nimport { CallState } from '@azure/communication-calling';\nimport { callCompositeContainerStyles, compositeOuterContainerStyles } from './styles/CallWithChatCompositeStyles';\nimport { CallWithChatAdapter } from './adapter/CallWithChatAdapter';\nimport { CallWithChatBackedCallAdapter } from './adapter/CallWithChatBackedCallAdapter';\nimport { CallWithChatBackedChatAdapter } from './adapter/CallWithChatBackedChatAdapter';\nimport { CallAdapter } from '../CallComposite';\nimport { ChatComposite, ChatAdapter } from '../ChatComposite';\nimport { BaseProvider, BaseCompositeProps } from '../common/BaseComposite';\nimport { CallWithChatCompositeIcons } from '../common/icons';\nimport { AvatarPersonaDataCallback } from '../common/AvatarPersona';\nimport { CallWithChatAdapterState } from './state/CallWithChatAdapterState';\n/* @conditional-compile-remove(end-of-call-survey) */\nimport { CallSurveyImprovementSuggestions } from '@internal/react-components';\nimport {\n ParticipantMenuItemsCallback,\n _useContainerHeight,\n _useContainerWidth,\n useTheme\n} from '@internal/react-components';\nimport { useId } from '@fluentui/react-hooks';\nimport { containerDivStyles } from '../common/ContainerRectProps';\nimport { useCallWithChatCompositeStrings } from './hooks/useCallWithChatCompositeStrings';\nimport { CallCompositeInner, CallCompositeOptions } from '../CallComposite/CallComposite';\nimport { RemoteVideoTileMenuOptions } from '../CallComposite/CallComposite';\nimport { LocalVideoTileOptions } from '../CallComposite/CallComposite';\n/* @conditional-compile-remove(call-readiness) */\nimport { DeviceCheckOptions } from '../CallComposite/CallComposite';\nimport { CommonCallControlOptions } from '../common/types/CommonCallControlOptions';\nimport { ChatButtonWithUnreadMessagesBadge } from './ChatButton/ChatButtonWithUnreadMessagesBadge';\nimport { getDesktopCommonButtonStyles } from '../common/ControlBar/CommonCallControlBar';\nimport { InjectedSidePaneProps } from '../CallComposite/components/SidePane/SidePaneProvider';\nimport { isDisabled } from '../CallComposite/utils';\nimport {\n CustomCallControlButtonCallback,\n CustomCallControlButtonCallbackArgs\n} from '../common/ControlBar/CustomButton';\nimport { SidePaneHeader } from '../common/SidePaneHeader';\nimport { CallControlOptions } from '../CallComposite/types/CallControlOptions';\nimport { useUnreadMessagesTracker } from './ChatButton/useUnreadMessagesTracker';\nimport { VideoGalleryLayout } from '@internal/react-components';\n/* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */\nimport { AttachmentOptions } from '@internal/react-components';\n\n/**\n * Props required for the {@link CallWithChatComposite}\n *\n * @public\n */\nexport interface CallWithChatCompositeProps extends BaseCompositeProps<CallWithChatCompositeIcons> {\n adapter: CallWithChatAdapter;\n /**\n * Fluent theme for the composite.\n *\n * Defaults to a light theme if undefined.\n */\n fluentTheme?: PartialTheme | Theme;\n /**\n * Optimizes the composite form factor for either desktop or mobile.\n * @remarks `mobile` is currently only optimized for Portrait mode on mobile devices and does not support landscape.\n * @defaultValue 'desktop'\n */\n formFactor?: 'desktop' | 'mobile';\n /**\n * URL that can be used to copy a call-with-chat invite to the Users clipboard.\n */\n joinInvitationURL?: string;\n /**\n * Flags to enable/disable or customize UI elements of the {@link CallWithChatComposite}\n */\n options?: CallWithChatCompositeOptions;\n}\n\n/**\n * Customization options for the control bar in calling with chat experience.\n *\n * @public\n */\nexport interface CallWithChatControlOptions extends CommonCallControlOptions {\n /**\n * Show or hide the chat button in the call-with-chat composite control bar.\n * @defaultValue true\n */\n chatButton?: boolean | /* @conditional-compile-remove(PSTN-calls) */ { disabled: boolean };\n}\n\n/**\n * Optional features of the {@link CallWithChatComposite}.\n *\n * @public\n */\nexport type CallWithChatCompositeOptions = {\n /**\n * Call control options to change what buttons show on the call-with-chat composite control bar.\n * If using the boolean values, true will cause default behavior across the whole control bar. False hides the whole control bar.\n */\n callControls?: boolean | CallWithChatControlOptions;\n /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */\n /**\n * Properties for configuring the File Sharing feature.\n * If undefined, file sharing feature will be disabled.\n * @beta\n */\n attachmentOptions?: AttachmentOptions;\n /* @conditional-compile-remove(call-readiness) */\n /**\n * Device permissions check options for your call.\n * Here you can choose what device permissions you prompt the user for,\n * as well as what device permissions must be accepted before starting a call.\n */\n deviceChecks?: DeviceCheckOptions;\n /* @conditional-compile-remove(call-readiness) */\n /**\n * Callback you may provide to supply users with further steps to troubleshoot why they have been\n * unable to grant your site the required permissions for the call.\n *\n * @example\n * ```ts\n * onPermissionsTroubleshootingClick: () =>\n * window.open('https://contoso.com/permissions-troubleshooting', '_blank');\n * ```\n *\n * @remarks\n * if this is not supplied, the composite will not show a 'further troubleshooting' link.\n */\n onPermissionsTroubleshootingClick?: (permissionsState: {\n camera: PermissionState;\n microphone: PermissionState;\n }) => void;\n /* @conditional-compile-remove(call-readiness) */\n /**\n * Optional callback to supply users with further troubleshooting steps for network issues\n * experienced when connecting to a call.\n *\n * @example\n * ```ts\n * onNetworkingTroubleShootingClick?: () =>\n * window.open('https://contoso.com/network-troubleshooting', '_blank');\n * ```\n *\n * @remarks\n * if this is not supplied, the composite will not show a 'network troubleshooting' link.\n */\n onNetworkingTroubleShootingClick?: () => void;\n /* @conditional-compile-remove(unsupported-browser) */\n /**\n * Callback you may provide to supply users with a provided page to showcase supported browsers by ACS.\n *\n * @example\n * ```ts\n * onBrowserTroubleShootingClick?: () =>\n * window.open('https://contoso.com/browser-troubleshooting', '_blank');\n * ```\n *\n * @remarks\n * if this is not supplied, the composite will not show a unsupported browser page.\n */\n onEnvironmentInfoTroubleshootingClick?: () => void;\n /**\n * Remote participant video tile menu options\n */\n remoteVideoTileMenuOptions?: RemoteVideoTileMenuOptions;\n /**\n * Options for controlling the local video tile.\n *\n * @remarks if 'false' the local video tile will not be rendered.\n */\n localVideoTile?: boolean | LocalVideoTileOptions;\n /**\n * Options for controlling the starting layout of the composite's video gallery\n */\n galleryOptions?: {\n /**\n * Layout for the gallery when the call starts\n */\n layout?: VideoGalleryLayout;\n };\n /* @conditional-compile-remove(end-of-call-survey) */\n /**\n * Options for end of call survey\n */\n surveyOptions?: {\n /**\n * Disable call survey at the end of a call.\n * @defaultValue false\n */\n disableSurvey?: boolean;\n /**\n * Optional callback to redirect users to custom screens when survey is done, note that default end call screen will be shown if this callback is not provided\n * This callback can be used to redirect users to different screens depending on survey state, whether it is submitted, skipped or has a problem when submitting the survey\n */\n onSurveyClosed?: (surveyState: 'sent' | 'skipped' | 'error', surveyError?: string) => void;\n /**\n * Optional callback to handle survey data including free form text response\n * Note that free form text response survey option is only going to be enabled when this callback is provided\n * User will need to handle all free form text response on their own\n */\n onSurveySubmitted?: (\n callId: string,\n surveyId: string,\n /**\n * This is the survey results containing star survey data and API tag survey data.\n * This part of the result will always be sent to the calling sdk\n * This callback provides user with the ability to gain access to survey data\n */\n submittedSurvey: CallSurvey,\n /**\n * This is the survey results containing free form text\n * This part of the result will not be handled by composites\n * User will need to collect and handle this information 100% on their own\n * Free form text survey is not going to show in the UI if onSurveySubmitted is not populated\n */\n improvementSuggestions: CallSurveyImprovementSuggestions\n ) => Promise<void>;\n };\n /**\n * Options for setting additional customizations related to personalized branding.\n */\n branding?: {\n /**\n * Logo displayed on the configuration page.\n */\n logo?: {\n /**\n * URL for the logo image.\n *\n * @remarks\n * Recommended size is 80x80 pixels.\n */\n url: string;\n /**\n * Alt text for the logo image.\n */\n alt?: string;\n /**\n * The logo can be displayed as a circle.\n *\n * @defaultValue 'unset'\n */\n shape?: 'unset' | 'circle';\n };\n /**\n * Background image displayed on the configuration page.\n */\n backgroundImage?: {\n /**\n * URL for the background image.\n *\n * @remarks\n * Background image should be larger than 576x567 pixels and smaller than 2048x2048 pixels pixels.\n */\n url: string;\n };\n };\n /* @conditional-compile-remove(spotlight) */\n /**\n * Options for settings related to spotlight.\n */\n spotlight?: {\n /**\n * Flag to hide the menu buttons to start and stop spotlight for remote participants and the local participant.\n * @defaultValue false\n */\n hideSpotlightButtons?: boolean;\n };\n\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n /**\n * enables rich text editor for the edit box\n * @defaultValue `false`\n *\n * @beta\n */\n richTextEditor?: boolean;\n};\n\ntype CallWithChatScreenProps = {\n callWithChatAdapter: CallWithChatAdapter;\n fluentTheme?: PartialTheme | Theme;\n formFactor?: 'desktop' | 'mobile';\n joinInvitationURL?: string;\n callControls?: boolean | CallWithChatControlOptions;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */\n attachmentOptions?: AttachmentOptions;\n rtl?: boolean;\n /* @conditional-compile-remove(call-readiness) */\n deviceChecks?: DeviceCheckOptions;\n /* @conditional-compile-remove(call-readiness) */\n onPermissionsTroubleshootingClick?: (permissionsState: {\n camera: PermissionState;\n microphone: PermissionState;\n }) => void;\n /* @conditional-compile-remove(call-readiness) */\n onNetworkingTroubleShootingClick?: () => void;\n /* @conditional-compile-remove(unsupported-browser) */\n onEnvironmentInfoTroubleshootingClick?: () => void;\n remoteVideoTileMenuOptions?: RemoteVideoTileMenuOptions;\n localVideoTile?: boolean | LocalVideoTileOptions;\n galleryOptions?: {\n layout?: VideoGalleryLayout;\n };\n /* @conditional-compile-remove(end-of-call-survey) */\n /**\n * Options for end of call survey\n */\n surveyOptions?: {\n /**\n * Disable call survey at the end of a call.\n * @defaultValue false\n */\n disableSurvey?: boolean;\n /**\n * Optional callback to redirect users to custom screens when survey is done, note that default end call screen will be shown if this callback is not provided\n * This callback can be used to redirect users to different screens depending on survey state, whether it is submitted, skipped or has a problem when submitting the survey\n */\n onSurveyClosed?: (surveyState: 'sent' | 'skipped' | 'error', surveyError?: string) => void;\n /**\n * Optional callback to handle survey data including free form text response\n * Note that free form text response survey option is only going to be enabled when this callback is provided\n * User will need to handle all free form text response on their own\n */\n onSurveySubmitted?: (\n callId: string,\n surveyId: string,\n /**\n * This is the survey results containing star survey data and API tag survey data.\n * This part of the result will always be sent to the calling sdk\n * This callback provides user with the ability to gain access to survey data\n */\n submittedSurvey: CallSurvey,\n /**\n * This is the survey results containing free form text\n * This part of the result will not be handled by composites\n * User will need to collect and handle this information 100% on their own\n * Free form text survey is not going to show in the UI if onSurveySubmitted is not populated\n */\n improvementSuggestions: CallSurveyImprovementSuggestions\n ) => Promise<void>;\n };\n logo?: {\n url: string;\n alt?: string;\n shape?: 'unset' | 'circle';\n };\n backgroundImage?: {\n url: string;\n };\n /* @conditional-compile-remove(spotlight) */\n spotlight?: {\n hideSpotlightButtons?: boolean;\n };\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n richTextEditor?: boolean;\n};\n\nconst CallWithChatScreen = (props: CallWithChatScreenProps): JSX.Element => {\n const { callWithChatAdapter, fluentTheme, formFactor = 'desktop' } = props;\n /* @conditional-compile-remove(end-of-call-survey) */\n const { surveyOptions } = props;\n const mobileView = formFactor === 'mobile';\n\n if (!callWithChatAdapter) {\n throw new Error('CallWithChatAdapter is undefined');\n }\n\n const callAdapter: CallAdapter = useMemo(\n () => new CallWithChatBackedCallAdapter(callWithChatAdapter),\n [callWithChatAdapter]\n );\n\n const [currentCallState, setCurrentCallState] = useState<CallState>();\n const [isChatInitialized, setIsChatInitialized] = useState(false);\n const [currentPage, setCurrentPage] = useState<CallCompositePage>();\n const [isChatOpen, setIsChatOpen] = useState(false);\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const updateCallWithChatPage = (newState: CallWithChatAdapterState): void => {\n setCurrentPage(newState.page);\n setCurrentCallState(newState.call?.state);\n setIsChatInitialized(newState.chat ? true : false);\n };\n updateCallWithChatPage(callWithChatAdapter.getState());\n callWithChatAdapter.onStateChange(updateCallWithChatPage);\n return () => {\n callWithChatAdapter.offStateChange(updateCallWithChatPage);\n };\n }, [callWithChatAdapter]);\n\n const chatAdapter: ChatAdapter = useMemo(() => {\n return new CallWithChatBackedChatAdapter(callWithChatAdapter);\n }, [callWithChatAdapter]);\n\n /** Constant setting of id for the parent stack of the composite */\n const compositeParentDivId = useId('callWithChatCompositeParentDiv-internal');\n\n const closeChat = useCallback(() => {\n setIsChatOpen(false);\n }, []);\n const openChat = useCallback(() => {\n setIsChatOpen(true);\n // timeout is required to give the window time to render the sendbox so we have something to send focus to.\n // TODO: Selecting elements in the DOM via attributes is not stable. We should expose an API from ChatComposite to be able to focus on the sendbox.\n const chatFocusTimeout = setInterval(() => {\n const callWithChatCompositeRootDiv = document.querySelector(`[id=\"${compositeParentDivId}\"]`);\n const sendbox = callWithChatCompositeRootDiv?.querySelector(`[id=\"sendbox\"]`) as HTMLTextAreaElement;\n if (sendbox !== null) {\n sendbox.focus();\n clearInterval(chatFocusTimeout);\n }\n }, 3);\n setTimeout(() => {\n clearInterval(chatFocusTimeout);\n }, 300);\n }, [compositeParentDivId]);\n\n const isOnHold = isOnHoldTrampoline(currentPage);\n useEffect(() => {\n if (isOnHold) {\n closeChat();\n }\n }, [closeChat, isOnHold]);\n\n const hasJoinedCall = !!(currentPage && hasJoinedCallFn(currentPage, currentCallState ?? 'None'));\n const toggleChat = useCallback(() => {\n isChatOpen || !hasJoinedCall ? closeChat() : openChat();\n }, [closeChat, hasJoinedCall, isChatOpen, openChat]);\n\n const callWithChatStrings = useCallWithChatCompositeStrings();\n const chatButtonStrings = useMemo(\n () => ({\n label: callWithChatStrings.chatButtonLabel,\n tooltipOffContent: callWithChatStrings.chatButtonTooltipOpen,\n tooltipOnContent: callWithChatStrings.chatButtonTooltipClose\n }),\n [callWithChatStrings]\n );\n const theme = useTheme();\n const commonButtonStyles = useMemo(\n () => (!mobileView ? getDesktopCommonButtonStyles(theme) : undefined),\n [mobileView, theme]\n );\n\n const showChatButton = checkShowChatButton(props.callControls);\n const chatButtonDisabled =\n showChatButton && (checkChatButtonIsDisabled(props.callControls) || !hasJoinedCall || isOnHold);\n const chatTabHeaderProps = useMemo(\n () =>\n mobileView && showChatButton\n ? {\n onClick: toggleChat,\n disabled: chatButtonDisabled\n }\n : undefined,\n [chatButtonDisabled, mobileView, toggleChat, showChatButton]\n );\n\n const unreadChatMessagesCount = useUnreadMessagesTracker(chatAdapter, isChatOpen, isChatInitialized);\n\n const customChatButton: CustomCallControlButtonCallback = useCallback(\n (args: CustomCallControlButtonCallbackArgs) => ({\n placement: mobileView ? 'primary' : 'secondary',\n onRenderButton: () => (\n <ChatButtonWithUnreadMessagesBadge\n checked={isChatOpen}\n showLabel={args.displayType !== 'compact'}\n onClick={toggleChat}\n disabled={chatButtonDisabled}\n strings={chatButtonStrings}\n styles={commonButtonStyles}\n newMessageLabel={callWithChatStrings.chatButtonNewMessageNotificationLabel}\n unreadChatMessagesCount={unreadChatMessagesCount}\n // As chat is disabled when on hold, we don't want to show the unread badge when on hold\n hideUnreadChatMessagesBadge={isOnHold}\n disableTooltip={mobileView}\n />\n )\n }),\n [\n callWithChatStrings.chatButtonNewMessageNotificationLabel,\n chatButtonStrings,\n commonButtonStyles,\n isChatOpen,\n chatButtonDisabled,\n mobileView,\n toggleChat,\n unreadChatMessagesCount,\n isOnHold\n ]\n );\n\n const callControlOptionsFromProps = useMemo(\n () => ({\n ...(typeof props.callControls === 'object' ? props.callControls : {})\n }),\n [props.callControls]\n );\n\n const injectedCustomButtonsFromProps = useMemo(() => {\n return [...(callControlOptionsFromProps.onFetchCustomButtonProps ?? [])];\n }, [callControlOptionsFromProps]);\n\n const callCompositeOptions: CallCompositeOptions = useMemo(\n () => ({\n callControls:\n props.callControls === false\n ? false\n : ({\n ...callControlOptionsFromProps,\n onFetchCustomButtonProps: [\n ...(showChatButton ? [customChatButton] : []),\n ...injectedCustomButtonsFromProps\n ],\n legacyControlBarExperience: false\n } as CallControlOptions),\n /* @conditional-compile-remove(call-readiness) */\n deviceChecks: props.deviceChecks,\n /* @conditional-compile-remove(call-readiness) */\n onNetworkingTroubleShootingClick: props.onNetworkingTroubleShootingClick,\n /* @conditional-compile-remove(call-readiness) */\n onPermissionsTroubleshootingClick: props.onPermissionsTroubleshootingClick,\n /* @conditional-compile-remove(unsupported-browser) */\n onEnvironmentInfoTroubleshootingClick: props.onEnvironmentInfoTroubleshootingClick,\n remoteVideoTileMenuOptions: props.remoteVideoTileMenuOptions,\n\n galleryOptions: props.galleryOptions,\n localVideoTile: props.localVideoTile,\n /* @conditional-compile-remove(end-of-call-survey) */\n surveyOptions: surveyOptions,\n branding: {\n logo: props.logo,\n backgroundImage: props.backgroundImage\n },\n /* @conditional-compile-remove(spotlight) */\n spotlight: props.spotlight\n }),\n [\n props.callControls,\n callControlOptionsFromProps,\n showChatButton,\n customChatButton,\n injectedCustomButtonsFromProps,\n /* @conditional-compile-remove(call-readiness) */\n props.deviceChecks,\n /* @conditional-compile-remove(unsupported-browser) */\n props.onEnvironmentInfoTroubleshootingClick,\n /* @conditional-compile-remove(call-readiness) */\n props.onNetworkingTroubleShootingClick,\n /* @conditional-compile-remove(call-readiness) */\n props.onPermissionsTroubleshootingClick,\n\n props.galleryOptions,\n props.localVideoTile,\n props.remoteVideoTileMenuOptions,\n /* @conditional-compile-remove(end-of-call-survey) */\n surveyOptions,\n props.logo,\n props.backgroundImage,\n /* @conditional-compile-remove(spotlight) */\n props.spotlight\n ]\n );\n\n const onRenderChatContent = useCallback(\n (): JSX.Element => (\n <ChatComposite\n adapter={chatAdapter}\n fluentTheme={theme}\n options={{\n topic: false,\n /* @conditional-compile-remove(chat-composite-participant-pane) */\n participantPane: false,\n /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */\n attachmentOptions: props.attachmentOptions,\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n richTextEditor: props.richTextEditor\n }}\n onFetchAvatarPersonaData={props.onFetchAvatarPersonaData}\n />\n ),\n [\n chatAdapter,\n /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */\n props.attachmentOptions,\n props.onFetchAvatarPersonaData,\n /* @conditional-compile-remove(rich-text-editor-composite-support) */ props.richTextEditor,\n theme\n ]\n );\n\n const sidePaneHeaderRenderer = useCallback(\n () => (\n <SidePaneHeader\n headingText={callWithChatStrings.chatPaneTitle}\n onClose={closeChat}\n dismissSidePaneButtonAriaLabel={callWithChatStrings.dismissSidePaneButtonLabel ?? ''}\n mobileView={mobileView}\n />\n ),\n [callWithChatStrings.chatPaneTitle, callWithChatStrings.dismissSidePaneButtonLabel, closeChat, mobileView]\n );\n\n const sidePaneContentRenderer = useMemo(\n () => (hasJoinedCall ? onRenderChatContent : undefined),\n [hasJoinedCall, onRenderChatContent]\n );\n\n const sidePaneRenderer = useMemo(\n () => ({\n contentRenderer: sidePaneContentRenderer,\n headerRenderer: sidePaneHeaderRenderer,\n id: 'chat'\n }),\n [sidePaneContentRenderer, sidePaneHeaderRenderer]\n );\n\n const overrideSidePaneProps: InjectedSidePaneProps = useMemo(\n () => ({\n renderer: sidePaneRenderer,\n isActive: isChatOpen,\n persistRenderingWhenClosed: true\n }),\n [isChatOpen, sidePaneRenderer]\n );\n\n const onSidePaneIdChange = useCallback(\n (sidePaneId: string | undefined) => {\n // If the pane is switched to something other than chat, removing rendering chat.\n if (sidePaneId && sidePaneId !== 'chat') {\n closeChat();\n }\n },\n [closeChat]\n );\n\n // When the call ends ensure the side pane is set to closed to prevent the side pane being open if the call is re-joined.\n useEffect(() => {\n callAdapter.on('callEnded', closeChat);\n return () => {\n callAdapter.off('callEnded', closeChat);\n };\n }, [callAdapter, closeChat]);\n\n return (\n <div ref={containerRef} className={mergeStyles(containerDivStyles)}>\n <Stack verticalFill grow styles={compositeOuterContainerStyles} id={compositeParentDivId}>\n <Stack horizontal grow>\n <Stack.Item grow styles={callCompositeContainerStyles(mobileView)}>\n <CallCompositeInner\n {...props}\n formFactor={formFactor}\n options={callCompositeOptions}\n adapter={callAdapter}\n fluentTheme={fluentTheme}\n callInvitationUrl={props.joinInvitationURL}\n overrideSidePane={overrideSidePaneProps}\n onSidePaneIdChange={onSidePaneIdChange}\n mobileChatTabHeader={chatTabHeaderProps}\n onCloseChatPane={closeChat}\n />\n </Stack.Item>\n </Stack>\n </Stack>\n </div>\n );\n};\n\n/**\n * CallWithChatComposite brings together key components to provide a full call with chat experience out of the box.\n *\n * @public\n */\nexport const CallWithChatComposite = (props: CallWithChatCompositeProps): JSX.Element => {\n const { adapter, fluentTheme, rtl, formFactor, joinInvitationURL, options } = props;\n return (\n <BaseProvider fluentTheme={fluentTheme} rtl={rtl} locale={props.locale} icons={props.icons}>\n <CallWithChatScreen\n {...props}\n /* @conditional-compile-remove(call-readiness) */\n deviceChecks={options?.deviceChecks}\n callWithChatAdapter={adapter}\n formFactor={formFactor}\n callControls={options?.callControls}\n joinInvitationURL={joinInvitationURL}\n fluentTheme={fluentTheme}\n remoteVideoTileMenuOptions={options?.remoteVideoTileMenuOptions}\n /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */\n attachmentOptions={options?.attachmentOptions}\n localVideoTile={options?.localVideoTile}\n galleryOptions={options?.galleryOptions}\n logo={options?.branding?.logo}\n backgroundImage={options?.branding?.backgroundImage}\n /* @conditional-compile-remove(end-of-call-survey) */\n surveyOptions={options?.surveyOptions}\n /* @conditional-compile-remove(spotlight) */\n spotlight={options?.spotlight}\n />\n </BaseProvider>\n );\n};\n\nconst hasJoinedCallFn = (page: CallCompositePage, callStatus: CallState): boolean => {\n /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(one-to-n-calling) */\n return (\n (page === 'call' &&\n (callStatus === 'Connected' || callStatus === 'RemoteHold' || callStatus === 'Disconnecting')) ||\n (page === 'hold' && (callStatus === 'LocalHold' || callStatus === 'Disconnecting'))\n );\n return page === 'call' && (callStatus === 'Connected' || callStatus === 'Disconnecting');\n};\n\nconst checkShowChatButton = (callControls?: boolean | CallWithChatControlOptions): boolean => {\n if (callControls === undefined || callControls === true) {\n return true;\n }\n if (callControls === false) {\n return false;\n }\n return callControls.chatButton !== false;\n};\n\nconst checkChatButtonIsDisabled = (callControls?: boolean | CallWithChatControlOptions): boolean => {\n return typeof callControls === 'object' && isDisabled(callControls?.chatButton);\n};\n\nconst isOnHoldTrampoline = (page: CallCompositePage | undefined): boolean => {\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n return page === 'hold';\n return false;\n};\n"]}
@@ -71,6 +71,13 @@ export type ChatCompositeOptions = {
71
71
  * @beta
72
72
  */
73
73
  attachmentOptions?: AttachmentOptions;
74
+ /**
75
+ * enables rich text editor for the edit box
76
+ * @defaultValue `false`
77
+ *
78
+ * @beta
79
+ */
80
+ richTextEditor?: boolean;
74
81
  };
75
82
  /**
76
83
  * A customizable UI composite for the chat experience.