@azure/communication-react 1.5.1-alpha-202304210012 → 1.5.1-alpha-202304220013

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 (52) hide show
  1. package/dist/communication-react.d.ts +4 -0
  2. package/dist/dist-cjs/communication-react/index.js +91 -37
  3. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  4. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  5. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  6. package/dist/dist-esm/calling-component-bindings/src/errorBarSelector.js +2 -0
  7. package/dist/dist-esm/calling-component-bindings/src/errorBarSelector.js.map +1 -1
  8. package/dist/dist-esm/react-components/src/components/CaptionsBanner.js +4 -4
  9. package/dist/dist-esm/react-components/src/components/CaptionsBanner.js.map +1 -1
  10. package/dist/dist-esm/react-components/src/components/ErrorBar.d.ts +4 -0
  11. package/dist/dist-esm/react-components/src/components/ErrorBar.js.map +1 -1
  12. package/dist/dist-esm/react-components/src/components/ScreenShareButton.js +10 -2
  13. package/dist/dist-esm/react-components/src/components/ScreenShareButton.js.map +1 -1
  14. package/dist/dist-esm/react-components/src/components/styles/Captions.style.d.ts +4 -0
  15. package/dist/dist-esm/react-components/src/components/styles/Captions.style.js +7 -0
  16. package/dist/dist-esm/react-components/src/components/styles/Captions.style.js.map +1 -1
  17. package/dist/dist-esm/react-components/src/localization/locales/de-DE/strings.json +119 -12
  18. package/dist/dist-esm/react-components/src/localization/locales/en-GB/strings.json +118 -11
  19. package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +2 -1
  20. package/dist/dist-esm/react-components/src/localization/locales/es-ES/strings.json +118 -11
  21. package/dist/dist-esm/react-components/src/localization/locales/fr-FR/strings.json +119 -12
  22. package/dist/dist-esm/react-components/src/localization/locales/it-IT/strings.json +118 -11
  23. package/dist/dist-esm/react-components/src/localization/locales/ja-JP/strings.json +118 -11
  24. package/dist/dist-esm/react-components/src/localization/locales/ko-KR/strings.json +118 -11
  25. package/dist/dist-esm/react-components/src/localization/locales/nl-NL/strings.json +118 -11
  26. package/dist/dist-esm/react-components/src/localization/locales/pt-BR/strings.json +119 -12
  27. package/dist/dist-esm/react-components/src/localization/locales/ru-RU/strings.json +118 -11
  28. package/dist/dist-esm/react-components/src/localization/locales/tr-TR/strings.json +119 -12
  29. package/dist/dist-esm/react-components/src/localization/locales/zh-CN/strings.json +118 -11
  30. package/dist/dist-esm/react-components/src/localization/locales/zh-TW/strings.json +118 -11
  31. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalPreview.js +3 -3
  32. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalPreview.js.map +1 -1
  33. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallControls.styles.js.map +1 -1
  34. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LocalPreview.styles.d.ts +20 -0
  35. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LocalPreview.styles.js +21 -1
  36. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LocalPreview.styles.js.map +1 -1
  37. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js +19 -2
  38. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js.map +1 -1
  39. package/dist/dist-esm/react-composites/src/composites/localization/locales/de-DE/strings.json +82 -3
  40. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-GB/strings.json +82 -3
  41. package/dist/dist-esm/react-composites/src/composites/localization/locales/es-ES/strings.json +82 -3
  42. package/dist/dist-esm/react-composites/src/composites/localization/locales/fr-FR/strings.json +82 -3
  43. package/dist/dist-esm/react-composites/src/composites/localization/locales/it-IT/strings.json +82 -3
  44. package/dist/dist-esm/react-composites/src/composites/localization/locales/ja-JP/strings.json +82 -3
  45. package/dist/dist-esm/react-composites/src/composites/localization/locales/ko-KR/strings.json +82 -3
  46. package/dist/dist-esm/react-composites/src/composites/localization/locales/nl-NL/strings.json +82 -3
  47. package/dist/dist-esm/react-composites/src/composites/localization/locales/pt-BR/strings.json +82 -3
  48. package/dist/dist-esm/react-composites/src/composites/localization/locales/ru-RU/strings.json +82 -3
  49. package/dist/dist-esm/react-composites/src/composites/localization/locales/tr-TR/strings.json +82 -3
  50. package/dist/dist-esm/react-composites/src/composites/localization/locales/zh-CN/strings.json +82 -3
  51. package/dist/dist-esm/react-composites/src/composites/localization/locales/zh-TW/strings.json +82 -3
  52. package/package.json +8 -8
@@ -6,7 +6,6 @@
6
6
  "sharingIconLabel": "共享",
7
7
  "mutedIconLabel": "已静音",
8
8
  "displayNamePlaceholder": "未命名的参与者",
9
- "participantStateConnecting": "正在呼叫...",
10
9
  "participantStateRinging": "正在呼叫...",
11
10
  "participantStateHold": "待机音乐"
12
11
  },
@@ -54,7 +53,10 @@
54
53
  "onSplitButtonAriaLabel": "关闭照相机和照相机选项",
55
54
  "offSplitButtonAriaLabel": "打开照相机和照相机选项",
56
55
  "cameraActionTurnedOnAnnouncement": "你的相机已打开",
57
- "cameraActionTurnedOffAnnouncement": "你的相机已关闭"
56
+ "cameraActionTurnedOffAnnouncement": "你的相机已关闭",
57
+ "onSplitButtonPrimaryActionCamera": "关闭摄像头",
58
+ "offSplitButtonPrimaryActionCamera": "打开摄像头",
59
+ "cameraPrimaryActionSplitButtonTitle": "使用照相机"
58
60
  },
59
61
  "microphoneButton": {
60
62
  "onLabel": "静音",
@@ -70,7 +72,10 @@
70
72
  "onSplitButtonAriaLabel": "将麦克风和音频选项静音",
71
73
  "offSplitButtonAriaLabel": "取消麦克风和音频选项的静音",
72
74
  "microphoneActionTurnedOnAnnouncement": "你的麦克风已打开",
73
- "microphoneActionTurnedOffAnnouncement": "你的麦克风已关闭"
75
+ "microphoneActionTurnedOffAnnouncement": "你的麦克风已关闭",
76
+ "offSplitButtonMicrophonePrimaryAction": "取消麦克风静音",
77
+ "onSplitButtonMicrophonePrimaryAction": "将麦克风静音",
78
+ "micPrimaryActionSplitButtonTitle": "使用麦克风"
74
79
  },
75
80
  "devicesButton": {
76
81
  "label": "设备",
@@ -90,7 +95,8 @@
90
95
  "menuHeader": "在此通话中",
91
96
  "participantsListButtonLabel": "{numParticipants} 人",
92
97
  "muteAllButtonLabel": "全部静音",
93
- "copyInviteLinkButtonLabel": "复制邀请链接"
98
+ "copyInviteLinkButtonLabel": "复制邀请链接",
99
+ "copyInviteLinkActionedAriaLabel": "已复制邀请链接"
94
100
  },
95
101
  "screenShareButton": {
96
102
  "onLabel": "停止演示",
@@ -126,7 +132,9 @@
126
132
  "editBoxSubmitButton": "提交",
127
133
  "messageReadCount": "{messageReadByCount}/{remoteParticipantsCount} 人已读",
128
134
  "actionMenuMoreOptions": "更多选项",
129
- "downloadFile": "下载文件"
135
+ "downloadFile": "下载文件",
136
+ "blockedWarningText": "由于组织策略,此消息已被删除。",
137
+ "blockedWarningLinkText": "详细信息"
130
138
  },
131
139
  "errorBar": {
132
140
  "unableToReachChatService": "你已脱机",
@@ -146,11 +154,13 @@
146
154
  "callNoSpeakerFound": "找不到扬声器或耳机。连接音频设备以收听呼叫。",
147
155
  "callNoMicrophoneFound": "找不到麦克风。连接音频输入设备。",
148
156
  "callMicrophoneAccessDenied": "无法访问麦克风。单击地址栏中的锁定以授予对此网页的权限。",
157
+ "callMicrophoneAccessDeniedSafari": "无法访问麦克风。刷新页面以允许权限,或检查此浏览器的设置并验证是否为此网站启用了权限。",
149
158
  "callMicrophoneMutedBySystem": "系统已将你设为静音。",
150
159
  "callMicrophoneUnmutedBySystem": "你的麦克风已恢复,系统已取消静音。",
151
160
  "callMacOsMicrophoneAccessDenied": "无法访问麦克风。在 macOS 隐私设置中授予麦克风权限。",
152
161
  "callLocalVideoFreeze": "网络带宽较差。你的视频可能会在通话中为其他人暂停。",
153
162
  "callCameraAccessDenied": "无法访问照相机。单击地址栏中的锁定以授予对此网页的权限。",
163
+ "callCameraAccessDeniedSafari": "无法访问照相机。刷新页面以允许权限,或检查此浏览器的设置并验证是否为此网站启用了权限。",
154
164
  "callCameraAlreadyInUse": "无法访问照相机。它可能已被其他应用程序使用。",
155
165
  "callVideoStoppedBySystem": "你的系统已停止你的视频。",
156
166
  "callVideoRecoveredBySystem": "你的视频已恢复。",
@@ -158,7 +168,9 @@
158
168
  "callMacOsScreenShareAccessDenied": "MacOS 正在阻止屏幕共享。更新你的隐私设置以允许此浏览器录制你的屏幕。",
159
169
  "dismissButtonAriaLabel": "关闭",
160
170
  "failedToJoinCallGeneric": "未能加入通话。",
161
- "failedToJoinCallInvalidMeetingLink": "无法加入会议。无效的链接。"
171
+ "failedToJoinCallInvalidMeetingLink": "无法加入会议。无效的链接。",
172
+ "startScreenSharingGeneric": "启动屏幕共享时出现问题。",
173
+ "cameraFrozenForRemoteParticipants": "通话中的用户在查看视频时遇到问题。请检查你的设备和网络。"
162
174
  },
163
175
  "videoGallery": {
164
176
  "screenIsBeingSharedMessage": "你正在共享你的屏幕",
@@ -167,7 +179,16 @@
167
179
  "localVideoCameraSwitcherLabel": "切换相机",
168
180
  "localVideoMovementLabel": "可移动本地视频磁贴",
169
181
  "localVideoSelectedDescription": "已选择 {cameraName}",
170
- "displayNamePlaceholder": "未命名的参与者"
182
+ "displayNamePlaceholder": "未命名的参与者",
183
+ "fitRemoteParticipantToFrame": "适应帧大小",
184
+ "fillRemoteParticipantFrame": "填充帧",
185
+ "pinParticipantForMe": "为我固定",
186
+ "pinParticipantForMeLimitReached": "固定(已达到上限)",
187
+ "unpinParticipantForMe": "取消固定",
188
+ "pinParticipantMenuItemAriaLabel": "固定 {participantName}",
189
+ "unpinParticipantMenuItemAriaLabel": "取消固定 {participantName}",
190
+ "pinnedParticipantAnnouncementAriaLabel": "已固定 {participantName}",
191
+ "unpinnedParticipantAnnouncementAriaLabel": "已取消固定 {participantName}"
171
192
  },
172
193
  "dialpad": {
173
194
  "placeholderText": "输入电话号码",
@@ -180,20 +201,102 @@
180
201
  "tooltipOffContent": "保持呼叫"
181
202
  },
182
203
  "videoTile": {
183
- "participantStateConnecting": "正在呼叫...",
184
204
  "participantStateRinging": "正在呼叫...",
185
205
  "participantStateHold": "待机音乐"
186
206
  },
187
- "SitePermissions": {
207
+ "CameraAndMicrophoneSitePermissionsRequest": {
188
208
  "primaryText": "允许{appName}使用你的相机和麦克风",
189
209
  "secondaryText": "这样参与者就可以看到并听到你的声音。",
190
210
  "linkText": "需要帮助? 获取疑难解答帮助",
191
- "primaryButtonText": "允许访问"
211
+ "primaryButtonText": "不使用相机和麦克风继续",
212
+ "ariaLabel": "允许相机和麦克风访问权限"
213
+ },
214
+ "CameraSitePermissionsRequest": {
215
+ "primaryText": "允许 {appName} 使用你的相机",
216
+ "secondaryText": "这样参与者就可以看到你了。",
217
+ "linkText": "需要帮助? 获取疑难解答帮助",
218
+ "primaryButtonText": "不使用摄像头继续",
219
+ "ariaLabel": "允许相机访问权限"
220
+ },
221
+ "MicrophoneSitePermissionsRequest": {
222
+ "primaryText": "允许 {appName} 使用你的麦克风",
223
+ "secondaryText": "这样参与者就可以听到你的声音。",
224
+ "linkText": "需要帮助? 获取疑难解答帮助",
225
+ "primaryButtonText": "不使用麦克风继续",
226
+ "ariaLabel": "允许麦克风访问权限"
227
+ },
228
+ "CameraAndMicrophoneSitePermissionsCheck": {
229
+ "primaryText": "检查摄像头和麦克风访问权限",
230
+ "secondaryText": "如果出现提示,请允许访问。这样参与者就可以看到并听到你的声音。",
231
+ "linkText": "需要帮助? 获取疑难解答帮助",
232
+ "primaryButtonText": "不使用相机和麦克风继续",
233
+ "ariaLabel": "正在检查摄像头和麦克风访问权限。如果出现提示,请允许访问。"
234
+ },
235
+ "CameraSitePermissionsCheck": {
236
+ "primaryText": "检查摄像头访问权限",
237
+ "secondaryText": "如果出现提示,请允许访问。这样参与者就可以看到你了。",
238
+ "linkText": "需要帮助? 获取疑难解答帮助",
239
+ "primaryButtonText": "不使用相机继续",
240
+ "ariaLabel": "正在检查摄像头访问权限。如果出现提示,请允许访问。"
241
+ },
242
+ "MicrophoneSitePermissionsCheck": {
243
+ "primaryText": "正在检查麦克风访问权限",
244
+ "secondaryText": "如果出现提示,请允许访问。这样参与者就可以听到你的声音。",
245
+ "linkText": "需要帮助? 获取疑难解答帮助",
246
+ "primaryButtonText": "不使用麦克风继续",
247
+ "ariaLabel": "正在检查麦克风访问权限。如果出现提示,请允许访问。"
248
+ },
249
+ "CameraAndMicrophoneSitePermissionsDenied": {
250
+ "primaryText": "无法访问相机和麦克风",
251
+ "secondaryText": "单击地址栏中的锁图标以向此网页授予麦克风权限。可能需要页面刷新。",
252
+ "primaryButtonText": "不使用摄像头和麦克风继续",
253
+ "linkText": "需要帮助? 获取疑难解答帮助"
254
+ },
255
+ "CameraAndMicrophoneSitePermissionsDeniedSafari": {
256
+ "primaryText": "无法访问相机和麦克风",
257
+ "secondaryText": "刷新页面以允许权限,或检查此浏览器的设置并验证是否为此网站启用了权限。",
258
+ "primaryButtonText": "不使用摄像头和麦克风继续",
259
+ "linkText": "需要帮助? 获取疑难解答帮助"
260
+ },
261
+ "CameraSitePermissionsDenied": {
262
+ "primaryText": "无法访问摄像头",
263
+ "secondaryText": "单击地址栏中的锁图标以向此网页授予相机权限。可能需要页面刷新。",
264
+ "primaryButtonText": "不使用摄像头继续",
265
+ "linkText": "需要帮助? 获取疑难解答帮助"
266
+ },
267
+ "MicrophoneSitePermissionsDenied": {
268
+ "primaryText": "无法访问麦克风",
269
+ "secondaryText": "单击地址栏中的锁图标以向此网页授予麦克风权限。可能需要页面刷新。",
270
+ "primaryButtonText": "不使用麦克风继续",
271
+ "linkText": "需要帮助? 获取疑难解答帮助"
272
+ },
273
+ "CameraSitePermissionsDeniedSafari": {
274
+ "primaryText": "无法访问相机",
275
+ "secondaryText": "刷新页面以允许权限,或检查此浏览器的设置并验证是否为此网站启用了权限。",
276
+ "primaryButtonText": "不使用相机继续",
277
+ "linkText": "需要帮助? 获取疑难解答帮助"
278
+ },
279
+ "MicrophoneSitePermissionsDeniedSafari": {
280
+ "primaryText": "无法访问麦克风",
281
+ "secondaryText": "刷新页面以允许权限,或检查此浏览器的设置并验证是否为此网站启用了权限。",
282
+ "primaryButtonText": "不使用麦克风继续",
283
+ "linkText": "需要帮助? 获取疑难解答帮助"
192
284
  },
193
285
  "UnsupportedBrowser": {
194
286
  "primaryText": "浏览器不受支持",
195
287
  "secondaryText": "请使用兼容的浏览器加入此通话。",
196
- "moreHelpLink": "更多帮助"
288
+ "moreHelpLinkText": "查看兼容性要求"
289
+ },
290
+ "UnsupportedBrowserVersion": {
291
+ "primaryText": "需要浏览器更新",
292
+ "secondaryText": "为确保通话达到最佳效果,请更新浏览器,然后再次尝试加入呼叫。",
293
+ "moreHelpLinkText": "查看兼容性要求",
294
+ "continueAnywayButtonText": "在不更新的情况下启动呼叫"
295
+ },
296
+ "UnsupportedOperatingSystem": {
297
+ "primaryText": "不支持操作系统",
298
+ "secondaryText": "请使用具有兼容的操作系统的设备加入此通话。",
299
+ "moreHelpLinkText": "查看兼容性要求"
197
300
  },
198
301
  "BrowserPermissionDenied": {
199
302
  "primaryText": "无法使用摄像头或麦克风",
@@ -215,5 +318,9 @@
215
318
  "step2DigitText": "2",
216
319
  "step3DigitText": "3",
217
320
  "step4DigitText": "4"
321
+ },
322
+ "VerticalGallery": {
323
+ "leftNavButtonAriaLabel": "上一页",
324
+ "rightNavButtonAriaLabel": "下一页"
218
325
  }
219
326
  }
@@ -6,7 +6,6 @@
6
6
  "sharingIconLabel": "分享",
7
7
  "mutedIconLabel": "已靜音",
8
8
  "displayNamePlaceholder": "未命名的參與者",
9
- "participantStateConnecting": "撥號中...",
10
9
  "participantStateRinging": "撥號中...",
11
10
  "participantStateHold": "電話保留"
12
11
  },
@@ -54,7 +53,10 @@
54
53
  "onSplitButtonAriaLabel": "關閉相機和相機選項",
55
54
  "offSplitButtonAriaLabel": "開啟相機和相機選項",
56
55
  "cameraActionTurnedOnAnnouncement": "您的相機已開啟",
57
- "cameraActionTurnedOffAnnouncement": "您的相機已關閉"
56
+ "cameraActionTurnedOffAnnouncement": "您的相機已關閉",
57
+ "onSplitButtonPrimaryActionCamera": "關閉攝影機",
58
+ "offSplitButtonPrimaryActionCamera": "開啟相機",
59
+ "cameraPrimaryActionSplitButtonTitle": "使用相機"
58
60
  },
59
61
  "microphoneButton": {
60
62
  "onLabel": "靜音",
@@ -70,7 +72,10 @@
70
72
  "onSplitButtonAriaLabel": "將麥克風和音訊選項設為靜音",
71
73
  "offSplitButtonAriaLabel": "將麥克風和音訊選項取消靜音",
72
74
  "microphoneActionTurnedOnAnnouncement": "您的麥克風已開啟",
73
- "microphoneActionTurnedOffAnnouncement": "您的麥克風已關閉"
75
+ "microphoneActionTurnedOffAnnouncement": "您的麥克風已關閉",
76
+ "offSplitButtonMicrophonePrimaryAction": "取消麥克風靜音",
77
+ "onSplitButtonMicrophonePrimaryAction": "將麥克風設為靜音",
78
+ "micPrimaryActionSplitButtonTitle": "使用麥克風"
74
79
  },
75
80
  "devicesButton": {
76
81
  "label": "裝置",
@@ -90,7 +95,8 @@
90
95
  "menuHeader": "在此通話中",
91
96
  "participantsListButtonLabel": "{numParticipants} 人員",
92
97
  "muteAllButtonLabel": "將所有人設為靜音",
93
- "copyInviteLinkButtonLabel": "複製邀請連結"
98
+ "copyInviteLinkButtonLabel": "複製邀請連結",
99
+ "copyInviteLinkActionedAriaLabel": "已複製邀請連結"
94
100
  },
95
101
  "screenShareButton": {
96
102
  "onLabel": "停止簡報",
@@ -126,7 +132,9 @@
126
132
  "editBoxSubmitButton": "提交",
127
133
  "messageReadCount": "讀取者為 {messageReadByCount} / {remoteParticipantsCount}",
128
134
  "actionMenuMoreOptions": "更多選項",
129
- "downloadFile": "下載檔案"
135
+ "downloadFile": "下載檔案",
136
+ "blockedWarningText": "由於組織原則,已刪除此訊息。",
137
+ "blockedWarningLinkText": "詳細資料"
130
138
  },
131
139
  "errorBar": {
132
140
  "unableToReachChatService": "您處於離線狀態",
@@ -146,11 +154,13 @@
146
154
  "callNoSpeakerFound": "找不到喇叭或耳機。請連接音訊裝置以聆聽通話。",
147
155
  "callNoMicrophoneFound": "找不到麥克風。請連接音訊輸入裝置。",
148
156
  "callMicrophoneAccessDenied": "無法存取麥克風。按一下網址列中的鎖定以授與此網頁的許可權。",
157
+ "callMicrophoneAccessDeniedSafari": "無法存取麥克風。重新整理頁面以允許許可權,或檢查此瀏覽器的設定,並確認已啟用此網站的許可權。",
149
158
  "callMicrophoneMutedBySystem": "系統已將您設為靜音。",
150
159
  "callMicrophoneUnmutedBySystem": "您的麥克風已復原,系統已取消您的靜音。",
151
160
  "callMacOsMicrophoneAccessDenied": "無法存取麥克風。請在您的 MacOS 隱私權設定中授與麥克風權限。",
152
161
  "callLocalVideoFreeze": "網路頻寬不佳。通話中的其他人可能會暫停您的視訊。",
153
162
  "callCameraAccessDenied": "無法存取相機。按一下網址列中的鎖定以授與此網頁的許可權。",
163
+ "callCameraAccessDeniedSafari": "無法存取相機。重新整理頁面以允許許可權,或檢查此瀏覽器的設定,並確認已啟用此網站的許可權。",
154
164
  "callCameraAlreadyInUse": "無法存取相機。其他應用程式可能已在使用它。",
155
165
  "callVideoStoppedBySystem": "您的影片已遭系統停止。",
156
166
  "callVideoRecoveredBySystem": "您的影片已繼續。",
@@ -158,7 +168,9 @@
158
168
  "callMacOsScreenShareAccessDenied": "MacOS 正在封鎖螢幕畫面分享。更新您的隱私權設定,以允許此瀏覽器錄製您的螢幕。",
159
169
  "dismissButtonAriaLabel": "關閉",
160
170
  "failedToJoinCallGeneric": "無法加入通話。",
161
- "failedToJoinCallInvalidMeetingLink": "無法加入會議。連結無效。"
171
+ "failedToJoinCallInvalidMeetingLink": "無法加入會議。連結無效。",
172
+ "startScreenSharingGeneric": "啟動畫面分享時發生問題。",
173
+ "cameraFrozenForRemoteParticipants": "通話中的使用者在觀看您的視訊時發生問題。請檢查您的裝置和網路。"
162
174
  },
163
175
  "videoGallery": {
164
176
  "screenIsBeingSharedMessage": "您現在正在分享螢幕畫面。",
@@ -167,7 +179,16 @@
167
179
  "localVideoCameraSwitcherLabel": "切換相機",
168
180
  "localVideoMovementLabel": "可移動的本機影片磚",
169
181
  "localVideoSelectedDescription": "已選取 {cameraName}",
170
- "displayNamePlaceholder": "未命名的參與者"
182
+ "displayNamePlaceholder": "未命名的參與者",
183
+ "fitRemoteParticipantToFrame": "調整成畫面大小",
184
+ "fillRemoteParticipantFrame": "填滿畫面",
185
+ "pinParticipantForMe": "為我釘選",
186
+ "pinParticipantForMeLimitReached": "釘選 (已達到限制)",
187
+ "unpinParticipantForMe": "取消釘選",
188
+ "pinParticipantMenuItemAriaLabel": "釘選 {participantName}",
189
+ "unpinParticipantMenuItemAriaLabel": "取消釘選 {participantName}",
190
+ "pinnedParticipantAnnouncementAriaLabel": "已釘選 {participantName}",
191
+ "unpinnedParticipantAnnouncementAriaLabel": "已取消釘選 {participantName}"
171
192
  },
172
193
  "dialpad": {
173
194
  "placeholderText": "輸入電話號碼",
@@ -180,20 +201,102 @@
180
201
  "tooltipOffContent": "保留通話"
181
202
  },
182
203
  "videoTile": {
183
- "participantStateConnecting": "撥號中...",
184
204
  "participantStateRinging": "撥號中...",
185
205
  "participantStateHold": "電話保留"
186
206
  },
187
- "SitePermissions": {
207
+ "CameraAndMicrophoneSitePermissionsRequest": {
188
208
  "primaryText": "允許 {appName} 使用您的相機和麥克風",
189
209
  "secondaryText": "這樣參與者才能看到您並聽到您的聲音。",
190
210
  "linkText": "需要協助嗎? 取得疑難排解說明",
191
- "primaryButtonText": "允許存取"
211
+ "primaryButtonText": "在沒有相機和麥克風的情況下繼續",
212
+ "ariaLabel": "允許相機和麥克風存取"
213
+ },
214
+ "CameraSitePermissionsRequest": {
215
+ "primaryText": "允許 {appName} 使用您的相機",
216
+ "secondaryText": "這樣參與者才能看到您。",
217
+ "linkText": "需要協助嗎? 取得疑難排解說明",
218
+ "primaryButtonText": "繼續但不使用相機",
219
+ "ariaLabel": "允許存取相機"
220
+ },
221
+ "MicrophoneSitePermissionsRequest": {
222
+ "primaryText": "允許 {appName} 使用您的麥克風",
223
+ "secondaryText": "這樣參與者才能聽到您的聲音。",
224
+ "linkText": "需要協助嗎? 取得疑難排解說明",
225
+ "primaryButtonText": "在沒有麥克風的情況下繼續",
226
+ "ariaLabel": "允許麥克風存取"
227
+ },
228
+ "CameraAndMicrophoneSitePermissionsCheck": {
229
+ "primaryText": "正在檢查相機和麥克風存取",
230
+ "secondaryText": "如果系統提示,則允許存取。這樣參與者才能看到您並聽到您的聲音。",
231
+ "linkText": "需要協助嗎? 取得疑難排解說明",
232
+ "primaryButtonText": "在沒有相機和麥克風的情況下繼續",
233
+ "ariaLabel": "正在檢查相機和麥克風存取。如果系統提示,則允許存取。"
234
+ },
235
+ "CameraSitePermissionsCheck": {
236
+ "primaryText": "正在檢查相機存取",
237
+ "secondaryText": "如果系統提示,則允許存取。這樣參與者才能看到您。",
238
+ "linkText": "需要協助嗎? 取得疑難排解說明",
239
+ "primaryButtonText": "在沒有相機的情況下繼續",
240
+ "ariaLabel": "正在檢查相機存取。如果系統提示,則允許存取。"
241
+ },
242
+ "MicrophoneSitePermissionsCheck": {
243
+ "primaryText": "正在檢查麥克風存取",
244
+ "secondaryText": "如果系統提示,則允許存取。這樣參與者才能聽到您的聲音。",
245
+ "linkText": "需要協助嗎? 取得疑難排解說明",
246
+ "primaryButtonText": "在沒有麥克風的情況下繼續",
247
+ "ariaLabel": "正在檢查麥克風存取。如果系統提示,則允許存取。"
248
+ },
249
+ "CameraAndMicrophoneSitePermissionsDenied": {
250
+ "primaryText": "無法存取攝影機和麥克風",
251
+ "secondaryText": "按一下網址列中的鎖定圖示,以授與此網頁的麥克風許可權。可能需要重新整理頁面。",
252
+ "primaryButtonText": "在沒有相機和麥克風的情況下繼續",
253
+ "linkText": "需要協助嗎? 取得疑難排解說明"
254
+ },
255
+ "CameraAndMicrophoneSitePermissionsDeniedSafari": {
256
+ "primaryText": "無法存取攝影機和麥克風",
257
+ "secondaryText": "重新整理頁面以允許許可權,或檢查此瀏覽器的設定,並確認已啟用此網站的權限。",
258
+ "primaryButtonText": "在沒有相機和麥克風的情況下繼續",
259
+ "linkText": "需要協助嗎? 取得疑難排解說明"
260
+ },
261
+ "CameraSitePermissionsDenied": {
262
+ "primaryText": "無法存取相機",
263
+ "secondaryText": "按一下網址列中的鎖定圖示,以授與此網頁的相機許可權。可能需要重新整理頁面。",
264
+ "primaryButtonText": "在沒有相機的情況下繼續",
265
+ "linkText": "需要協助嗎? 取得疑難排解說明"
266
+ },
267
+ "MicrophoneSitePermissionsDenied": {
268
+ "primaryText": "無法存取麥克風",
269
+ "secondaryText": "按一下網址列中的鎖定圖示,以授與此網頁的麥克風許可權。可能需要重新整理頁面。",
270
+ "primaryButtonText": "在沒有麥克風的情況下繼續",
271
+ "linkText": "需要協助嗎? 取得疑難排解說明"
272
+ },
273
+ "CameraSitePermissionsDeniedSafari": {
274
+ "primaryText": "無法存取攝影機",
275
+ "secondaryText": "重新整理頁面以允許許可權,或檢查此瀏覽器的設定,並確認已啟用此網站的權限。",
276
+ "primaryButtonText": "在沒有相機的情況下繼續",
277
+ "linkText": "需要協助嗎? 取得疑難排解說明"
278
+ },
279
+ "MicrophoneSitePermissionsDeniedSafari": {
280
+ "primaryText": "無法存取麥克風",
281
+ "secondaryText": "重新整理頁面以允許許可權,或檢查此瀏覽器的設定,並確認已啟用此網站的權限。",
282
+ "primaryButtonText": "繼續但不使用麥克風",
283
+ "linkText": "需要協助嗎? 取得疑難排解說明"
192
284
  },
193
285
  "UnsupportedBrowser": {
194
286
  "primaryText": "不支援瀏覽器",
195
287
  "secondaryText": "請使用相容的瀏覽器加入此通話。",
196
- "moreHelpLink": "更多協助資訊"
288
+ "moreHelpLinkText": "查看相容性需求"
289
+ },
290
+ "UnsupportedBrowserVersion": {
291
+ "primaryText": "需要更新瀏覽器",
292
+ "secondaryText": "為確保通話品質最佳,請更新瀏覽器,然後再次嘗試加入通話。",
293
+ "moreHelpLinkText": "查看相容性需求",
294
+ "continueAnywayButtonText": "不更新即開始通話"
295
+ },
296
+ "UnsupportedOperatingSystem": {
297
+ "primaryText": "不支援作業系統",
298
+ "secondaryText": "請使用具有相容作業系統的裝置加入此通話。",
299
+ "moreHelpLinkText": "查看相容性需求"
197
300
  },
198
301
  "BrowserPermissionDenied": {
199
302
  "primaryText": "無法使用您的相機或麥克風",
@@ -215,5 +318,9 @@
215
318
  "step2DigitText": "2",
216
319
  "step3DigitText": "3",
217
320
  "step4DigitText": "4"
321
+ },
322
+ "VerticalGallery": {
323
+ "leftNavButtonAriaLabel": "上一頁",
324
+ "rightNavButtonAriaLabel": "下一頁"
218
325
  }
219
326
  }
@@ -21,7 +21,7 @@ import { getLocalMicrophoneEnabled } from '../selectors/baseSelectors';
21
21
  import { devicePermissionSelector } from '../selectors/devicePermissionSelector';
22
22
  import { localPreviewSelector } from '../selectors/localPreviewSelector';
23
23
  import { buttonFlyoutIncreasedSizeStyles } from '../styles/Buttons.styles';
24
- import { cameraOffLabelStyle, localPreviewContainerStyleDesktop, localPreviewContainerStyleMobile, localPreviewTileStyle } from '../styles/LocalPreview.styles';
24
+ import { cameraOffLabelStyle, localPreviewButtonStyle, localPreviewContainerStyleDesktop, localPreviewContainerStyleMobile, localPreviewTileStyle } from '../styles/LocalPreview.styles';
25
25
  /**
26
26
  * @private
27
27
  */
@@ -59,8 +59,8 @@ export const LocalPreview = (props) => {
59
59
  return (React.createElement(Stack, { "data-ui-id": "call-composite-local-preview", className: props.mobileView ? localPreviewContainerStyleMobile : localPreviewContainerStyleDesktop },
60
60
  React.createElement(VideoTile, { styles: localPreviewTileStyle, renderElement: (localPreviewProps === null || localPreviewProps === void 0 ? void 0 : localPreviewProps.videoStreamElement) ? (React.createElement(StreamMedia, { videoStreamElement: localPreviewProps.videoStreamElement })) : undefined, onRenderPlaceholder: onRenderPlaceholder },
61
61
  React.createElement(ControlBar, { layout: "floatingBottom" },
62
- React.createElement(MicrophoneButton, { "data-ui-id": "call-composite-local-device-settings-microphone-button", checked: isLocalMicrophoneEnabled, onToggleMicrophone: onToggleMic, disabled: !microphonePermissionGranted || !hasMicrophones, showLabel: true }),
63
- React.createElement(CameraButton, Object.assign({ "data-ui-id": "call-composite-local-device-settings-camera-button" }, cameraButtonProps, { showLabel: true, disabled: !cameraPermissionGranted || !hasCameras })),
62
+ React.createElement(MicrophoneButton, { "data-ui-id": "call-composite-local-device-settings-microphone-button", checked: isLocalMicrophoneEnabled, onToggleMicrophone: onToggleMic, disabled: !microphonePermissionGranted || !hasMicrophones, showLabel: true, styles: localPreviewButtonStyle }),
63
+ React.createElement(CameraButton, Object.assign({ "data-ui-id": "call-composite-local-device-settings-camera-button" }, cameraButtonProps, { showLabel: true, disabled: !cameraPermissionGranted || !hasCameras, styles: localPreviewButtonStyle })),
64
64
  props.showDevicesButton && (React.createElement(DevicesButton, Object.assign({ "data-ui-id": "call-composite-local-device-settings-options-button" }, devicesButtonProps, {
65
65
  // disable button whilst all other buttons are disabled
66
66
  disabled: !microphonePermissionGranted || !cameraPermissionGranted || hasNoDevices, showLabel: true, styles: devicesButtonStyles })))))));
@@ -1 +1 @@
1
- {"version":3,"file":"LocalPreview.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/components/LocalPreview.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { mergeStyles, Stack, Text } from '@fluentui/react';\nimport {\n CameraButton,\n ControlBar,\n MicrophoneButton,\n DevicesButton,\n StreamMedia,\n useTheme,\n VideoTile\n} from '@internal/react-components';\nimport React, { useCallback } from 'react';\nimport { CallCompositeIcon } from '../../common/icons';\nimport { useLocale } from '../../localization';\nimport { useAdapter } from '../adapter/CallAdapterProvider';\nimport { usePropsFor } from '../hooks/usePropsFor';\nimport { useSelector } from '../hooks/useSelector';\nimport { getLocalMicrophoneEnabled } from '../selectors/baseSelectors';\nimport { devicePermissionSelector } from '../selectors/devicePermissionSelector';\nimport { localPreviewSelector } from '../selectors/localPreviewSelector';\nimport { buttonFlyoutIncreasedSizeStyles } from '../styles/Buttons.styles';\nimport {\n cameraOffLabelStyle,\n localPreviewContainerStyleDesktop,\n localPreviewContainerStyleMobile,\n localPreviewTileStyle\n} from '../styles/LocalPreview.styles';\n\n/**\n * @private\n */\nexport interface LocalPreviewProps {\n mobileView: boolean;\n showDevicesButton: boolean;\n}\n\n/**\n * @private\n */\nexport const LocalPreview = (props: LocalPreviewProps): JSX.Element => {\n const locale = useLocale();\n const cameraButtonProps = usePropsFor(CameraButton);\n const localPreviewProps = useSelector(localPreviewSelector);\n const devicesButtonProps = usePropsFor(DevicesButton);\n const { audio: microphonePermissionGranted, video: cameraPermissionGranted } = useSelector(devicePermissionSelector);\n\n const isLocalMicrophoneEnabled = useSelector(getLocalMicrophoneEnabled);\n const adapter = useAdapter();\n\n const onToggleMic = useCallback(async () => {\n isLocalMicrophoneEnabled ? adapter.mute() : adapter.unmute();\n }, [adapter, isLocalMicrophoneEnabled]);\n\n const hasNoDevices =\n devicesButtonProps.cameras.length === 0 &&\n devicesButtonProps.microphones.length === 0 &&\n devicesButtonProps.speakers.length === 0;\n\n const hasCameras = devicesButtonProps.cameras.length > 0;\n const hasMicrophones = devicesButtonProps.microphones.length > 0;\n\n const theme = useTheme();\n const onRenderPlaceholder = useCallback((): JSX.Element => {\n return (\n <Stack\n className={mergeStyles({ width: '100%', height: '100%' })}\n verticalAlign=\"center\"\n tokens={{ childrenGap: '0.25rem' }}\n >\n <Stack.Item align=\"center\">\n <CallCompositeIcon\n iconName=\"LocalPreviewPlaceholder\"\n className={mergeStyles(cameraOffLabelStyle, { color: theme.palette.neutralTertiary })}\n />\n </Stack.Item>\n <Stack.Item align=\"center\">\n <Text className={mergeStyles(cameraOffLabelStyle, { color: theme.palette.neutralSecondary })}>\n {locale.strings.call.cameraTurnedOff}\n </Text>\n </Stack.Item>\n </Stack>\n );\n }, [theme, locale.strings.call.cameraTurnedOff]);\n\n const devicesButtonStyles = props.mobileView\n ? {\n menuStyles: {\n menuItemStyles: buttonFlyoutIncreasedSizeStyles\n }\n }\n : undefined;\n\n return (\n <Stack\n data-ui-id=\"call-composite-local-preview\"\n className={props.mobileView ? localPreviewContainerStyleMobile : localPreviewContainerStyleDesktop}\n >\n <VideoTile\n styles={localPreviewTileStyle}\n renderElement={\n localPreviewProps?.videoStreamElement ? (\n <StreamMedia videoStreamElement={localPreviewProps.videoStreamElement} />\n ) : undefined\n }\n onRenderPlaceholder={onRenderPlaceholder}\n >\n <ControlBar layout=\"floatingBottom\">\n <MicrophoneButton\n data-ui-id=\"call-composite-local-device-settings-microphone-button\"\n checked={isLocalMicrophoneEnabled}\n onToggleMicrophone={onToggleMic}\n disabled={!microphonePermissionGranted || !hasMicrophones}\n showLabel={true}\n />\n <CameraButton\n data-ui-id=\"call-composite-local-device-settings-camera-button\"\n {...cameraButtonProps}\n showLabel={true}\n disabled={!cameraPermissionGranted || !hasCameras}\n />\n {props.showDevicesButton && (\n <DevicesButton\n data-ui-id=\"call-composite-local-device-settings-options-button\"\n {...devicesButtonProps}\n // disable button whilst all other buttons are disabled\n disabled={!microphonePermissionGranted || !cameraPermissionGranted || hasNoDevices}\n showLabel={true}\n styles={devicesButtonStyles}\n />\n )}\n </ControlBar>\n </VideoTile>\n </Stack>\n );\n};\n\"../../../../../react-components/src\""]}
1
+ {"version":3,"file":"LocalPreview.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/components/LocalPreview.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { mergeStyles, Stack, Text } from '@fluentui/react';\nimport {\n CameraButton,\n ControlBar,\n MicrophoneButton,\n DevicesButton,\n StreamMedia,\n useTheme,\n VideoTile\n} from '@internal/react-components';\nimport React, { useCallback } from 'react';\nimport { CallCompositeIcon } from '../../common/icons';\nimport { useLocale } from '../../localization';\nimport { useAdapter } from '../adapter/CallAdapterProvider';\nimport { usePropsFor } from '../hooks/usePropsFor';\nimport { useSelector } from '../hooks/useSelector';\nimport { getLocalMicrophoneEnabled } from '../selectors/baseSelectors';\nimport { devicePermissionSelector } from '../selectors/devicePermissionSelector';\nimport { localPreviewSelector } from '../selectors/localPreviewSelector';\nimport { buttonFlyoutIncreasedSizeStyles } from '../styles/Buttons.styles';\nimport {\n cameraOffLabelStyle,\n localPreviewButtonStyle,\n localPreviewContainerStyleDesktop,\n localPreviewContainerStyleMobile,\n localPreviewTileStyle\n} from '../styles/LocalPreview.styles';\n\n/**\n * @private\n */\nexport interface LocalPreviewProps {\n mobileView: boolean;\n showDevicesButton: boolean;\n}\n\n/**\n * @private\n */\nexport const LocalPreview = (props: LocalPreviewProps): JSX.Element => {\n const locale = useLocale();\n const cameraButtonProps = usePropsFor(CameraButton);\n const localPreviewProps = useSelector(localPreviewSelector);\n const devicesButtonProps = usePropsFor(DevicesButton);\n const { audio: microphonePermissionGranted, video: cameraPermissionGranted } = useSelector(devicePermissionSelector);\n\n const isLocalMicrophoneEnabled = useSelector(getLocalMicrophoneEnabled);\n const adapter = useAdapter();\n\n const onToggleMic = useCallback(async () => {\n isLocalMicrophoneEnabled ? adapter.mute() : adapter.unmute();\n }, [adapter, isLocalMicrophoneEnabled]);\n\n const hasNoDevices =\n devicesButtonProps.cameras.length === 0 &&\n devicesButtonProps.microphones.length === 0 &&\n devicesButtonProps.speakers.length === 0;\n\n const hasCameras = devicesButtonProps.cameras.length > 0;\n const hasMicrophones = devicesButtonProps.microphones.length > 0;\n\n const theme = useTheme();\n const onRenderPlaceholder = useCallback((): JSX.Element => {\n return (\n <Stack\n className={mergeStyles({ width: '100%', height: '100%' })}\n verticalAlign=\"center\"\n tokens={{ childrenGap: '0.25rem' }}\n >\n <Stack.Item align=\"center\">\n <CallCompositeIcon\n iconName=\"LocalPreviewPlaceholder\"\n className={mergeStyles(cameraOffLabelStyle, { color: theme.palette.neutralTertiary })}\n />\n </Stack.Item>\n <Stack.Item align=\"center\">\n <Text className={mergeStyles(cameraOffLabelStyle, { color: theme.palette.neutralSecondary })}>\n {locale.strings.call.cameraTurnedOff}\n </Text>\n </Stack.Item>\n </Stack>\n );\n }, [theme, locale.strings.call.cameraTurnedOff]);\n\n const devicesButtonStyles = props.mobileView\n ? {\n menuStyles: {\n menuItemStyles: buttonFlyoutIncreasedSizeStyles\n }\n }\n : undefined;\n\n return (\n <Stack\n data-ui-id=\"call-composite-local-preview\"\n className={props.mobileView ? localPreviewContainerStyleMobile : localPreviewContainerStyleDesktop}\n >\n <VideoTile\n styles={localPreviewTileStyle}\n renderElement={\n localPreviewProps?.videoStreamElement ? (\n <StreamMedia videoStreamElement={localPreviewProps.videoStreamElement} />\n ) : undefined\n }\n onRenderPlaceholder={onRenderPlaceholder}\n >\n <ControlBar layout=\"floatingBottom\">\n <MicrophoneButton\n data-ui-id=\"call-composite-local-device-settings-microphone-button\"\n checked={isLocalMicrophoneEnabled}\n onToggleMicrophone={onToggleMic}\n disabled={!microphonePermissionGranted || !hasMicrophones}\n showLabel={true}\n styles={localPreviewButtonStyle}\n />\n <CameraButton\n data-ui-id=\"call-composite-local-device-settings-camera-button\"\n {...cameraButtonProps}\n showLabel={true}\n disabled={!cameraPermissionGranted || !hasCameras}\n styles={localPreviewButtonStyle}\n />\n {props.showDevicesButton && (\n <DevicesButton\n data-ui-id=\"call-composite-local-device-settings-options-button\"\n {...devicesButtonProps}\n // disable button whilst all other buttons are disabled\n disabled={!microphonePermissionGranted || !cameraPermissionGranted || hasNoDevices}\n showLabel={true}\n styles={devicesButtonStyles}\n />\n )}\n </ControlBar>\n </VideoTile>\n </Stack>\n );\n};\n\"../../../../../react-components/src\""]}
@@ -1 +1 @@
1
- {"version":3,"file":"CallControls.styles.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/styles/CallControls.styles.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,eAAe;AACf,MAAM,CAAC,MAAM,yBAAyB,GAAW;IAC/C,UAAU,EAAE,SAAS;IACrB,aAAa,EAAE,SAAS;IAExB,4HAA4H;IAC5H,SAAS,EAAE;;;GAGV;CACF,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { IStyle } from '@fluentui/react';\n\n/** @private */\nexport const controlBarContainerStyles: IStyle = {\n paddingTop: '0.25rem',\n paddingBottom: '0.25rem',\n\n // @TODO: this should be exposed through a custom CallComposite Theme API that extends the fluent theme with semantic values\n boxShadow: `\n 0px 6.400000095367432px 14.399999618530273px 0px #00000021;\n 0px 1.2000000476837158px 3.5999999046325684px 0px #0000001A;\n `\n};\n"]}
1
+ {"version":3,"file":"CallControls.styles.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/styles/CallControls.styles.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,eAAe;AACf,MAAM,CAAC,MAAM,yBAAyB,GAAW;IAC/C,UAAU,EAAE,SAAS;IACrB,aAAa,EAAE,SAAS;IACxB,4HAA4H;IAC5H,SAAS,EAAE;;;GAGV;CACF,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { IStyle } from '@fluentui/react';\n\n/** @private */\nexport const controlBarContainerStyles: IStyle = {\n paddingTop: '0.25rem',\n paddingBottom: '0.25rem',\n // @TODO: this should be exposed through a custom CallComposite Theme API that extends the fluent theme with semantic values\n boxShadow: `\n 0px 6.400000095367432px 14.399999618530273px 0px #00000021;\n 0px 1.2000000476837158px 3.5999999046325684px 0px #0000001A;\n `\n};\n"]}
@@ -16,6 +16,26 @@ export declare const cameraOffLabelStyle: string;
16
16
  export declare const localPreviewTileStyle: {
17
17
  root: {
18
18
  borderRadius: string;
19
+ '@media (forced-colors: active)': {
20
+ borderColor: string;
21
+ border: string;
22
+ };
23
+ };
24
+ };
25
+ /**
26
+ * @private
27
+ */
28
+ export declare const localPreviewButtonStyle: {
29
+ root: {
30
+ '@media (forced-colors: active)': {
31
+ ':focus': {
32
+ border: string;
33
+ };
34
+ ':focus::after': {
35
+ border: string;
36
+ outline: string;
37
+ };
38
+ };
19
39
  };
20
40
  };
21
41
  //# sourceMappingURL=LocalPreview.styles.d.ts.map
@@ -23,7 +23,27 @@ export const cameraOffLabelStyle = mergeStyles({
23
23
  */
24
24
  export const localPreviewTileStyle = {
25
25
  root: {
26
- borderRadius: '.25rem'
26
+ borderRadius: '.25rem',
27
+ '@media (forced-colors: active)': {
28
+ borderColor: '#FFFFFF',
29
+ border: '1px solid'
30
+ }
31
+ }
32
+ };
33
+ /**
34
+ * @private
35
+ */
36
+ export const localPreviewButtonStyle = {
37
+ root: {
38
+ '@media (forced-colors: active)': {
39
+ ':focus': {
40
+ border: '1px solid !important' // we need bang important to override fluents colours
41
+ },
42
+ ':focus::after': {
43
+ border: 'unset !important',
44
+ outline: 'unset !important'
45
+ }
46
+ }
27
47
  }
28
48
  };
29
49
  //# sourceMappingURL=LocalPreview.styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LocalPreview.styles.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/styles/LocalPreview.styles.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAU,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,0BAA0B,GAAW;IACzC,YAAY,EAAE,QAAQ;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,WAAW,iCACvD,0BAA0B,KAC7B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,QAAQ,IACjB,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,WAAW,iCACtD,0BAA0B,KAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,IACd,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC;IAC7C,QAAQ,EAAE,SAAS,CAAC,OAAO;CAC5B,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE;QACJ,YAAY,EAAE,QAAQ;KACvB;CACF,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { IStyle, mergeStyles } from '@fluentui/react';\n\nconst localPreviewContainerStyle: IStyle = {\n borderRadius: '.25rem'\n};\n\n/**\n * @private\n */\nexport const localPreviewContainerStyleDesktop = mergeStyles({\n ...localPreviewContainerStyle,\n width: '50%',\n minWidth: '11rem',\n maxWidth: '25rem',\n height: '18.75rem',\n padding: '0.5rem'\n});\n\n/**\n * @private\n */\nexport const localPreviewContainerStyleMobile = mergeStyles({\n ...localPreviewContainerStyle,\n width: '100%',\n height: '100%'\n});\n\n/**\n * @private\n */\nexport const cameraOffLabelStyle = mergeStyles({\n fontSize: '0.75rem' // 12px\n});\n\n/**\n * @private\n */\nexport const localPreviewTileStyle = {\n root: {\n borderRadius: '.25rem'\n }\n};\n"]}
1
+ {"version":3,"file":"LocalPreview.styles.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/styles/LocalPreview.styles.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAU,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,0BAA0B,GAAW;IACzC,YAAY,EAAE,QAAQ;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,WAAW,iCACvD,0BAA0B,KAC7B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,QAAQ,IACjB,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,WAAW,iCACtD,0BAA0B,KAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,IACd,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC;IAC7C,QAAQ,EAAE,SAAS,CAAC,OAAO;CAC5B,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE;QACJ,YAAY,EAAE,QAAQ;QACtB,gCAAgC,EAAE;YAChC,WAAW,EAAE,SAAS;YACtB,MAAM,EAAE,WAAW;SACpB;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE;QACJ,gCAAgC,EAAE;YAChC,QAAQ,EAAE;gBACR,MAAM,EAAE,sBAAsB,CAAC,qDAAqD;aACrF;YACD,eAAe,EAAE;gBACf,MAAM,EAAE,kBAAkB;gBAC1B,OAAO,EAAE,kBAAkB;aAC5B;SACF;KACF;CACF,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { IStyle, mergeStyles } from '@fluentui/react';\n\nconst localPreviewContainerStyle: IStyle = {\n borderRadius: '.25rem'\n};\n\n/**\n * @private\n */\nexport const localPreviewContainerStyleDesktop = mergeStyles({\n ...localPreviewContainerStyle,\n width: '50%',\n minWidth: '11rem',\n maxWidth: '25rem',\n height: '18.75rem',\n padding: '0.5rem'\n});\n\n/**\n * @private\n */\nexport const localPreviewContainerStyleMobile = mergeStyles({\n ...localPreviewContainerStyle,\n width: '100%',\n height: '100%'\n});\n\n/**\n * @private\n */\nexport const cameraOffLabelStyle = mergeStyles({\n fontSize: '0.75rem' // 12px\n});\n\n/**\n * @private\n */\nexport const localPreviewTileStyle = {\n root: {\n borderRadius: '.25rem',\n '@media (forced-colors: active)': {\n borderColor: '#FFFFFF',\n border: '1px solid'\n }\n }\n};\n\n/**\n * @private\n */\nexport const localPreviewButtonStyle = {\n root: {\n '@media (forced-colors: active)': {\n ':focus': {\n border: '1px solid !important' // we need bang important to override fluents colours\n },\n ':focus::after': {\n border: 'unset !important', // we need bang important to override fluents colours\n outline: 'unset !important'\n }\n }\n }\n};\n"]}
@@ -120,7 +120,7 @@ export const CommonCallControlBar = (props) => {
120
120
  // only center control bar buttons based on parent container if there are enough space on the screen and not mobile
121
121
  () => (!props.mobileView && !isOutOfSpace ? (props.rtl ? wrapperDesktopRtlStyles : wrapperDesktopStyles) : {}), [props.mobileView, props.rtl, isOutOfSpace]);
122
122
  // only center control bar buttons based on parent container if there are enough space on the screen and not mobile
123
- const controlBarDesktopContainerStyles = useMemo(() => (!props.mobileView && !isOutOfSpace ? { position: 'relative' } : {}), [props.mobileView, isOutOfSpace]);
123
+ const controlBarDesktopContainerStyles = useMemo(() => (!props.mobileView && !isOutOfSpace ? { position: 'relative', minHeight: '4.5rem', width: '100%' } : {}), [props.mobileView, isOutOfSpace]);
124
124
  /* @conditional-compile-remove(control-bar-button-injection) */
125
125
  const customButtons = useMemo(() => generateCustomCallControlBarButton(onFetchCustomButtonPropsTrampoline(options !== false ? options : undefined), options !== false ? options === null || options === void 0 ? void 0 : options.displayType : undefined), [options]);
126
126
  // when options is false then we want to hide the whole control bar.
@@ -250,7 +250,11 @@ const getDesktopScreenShareButtonStyles = (theme) => {
250
250
  border: 'none',
251
251
  background: theme.palette.themePrimary,
252
252
  color: theme.palette.white,
253
- '* > svg': { fill: theme.palette.white }
253
+ '* > svg': { fill: theme.palette.white },
254
+ '@media (forced-colors: active)': {
255
+ border: '1px solid',
256
+ borderColor: theme.palette.black
257
+ }
254
258
  };
255
259
  const overrides = {
256
260
  rootChecked: overrideStyles,
@@ -263,6 +267,19 @@ const getDesktopEndCallButtonStyles = (theme) => {
263
267
  root: {
264
268
  // Suppress border around the dark-red button.
265
269
  border: 'none'
270
+ },
271
+ rootFocused: {
272
+ '@media (forced-colors: active)': {
273
+ background: 'highlight',
274
+ border: '1px solid'
275
+ }
276
+ },
277
+ icon: {
278
+ '@media (forced-colors: active)': {
279
+ ':focused': {
280
+ color: theme.palette.white
281
+ }
282
+ }
266
283
  }
267
284
  };
268
285
  return concatStyleSets(getDesktopCommonButtonStyles(theme), overrides);